These errors occur in r4721 and above, r4720 is fine.
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.new_record?
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:123:in `method_missing'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:344:in `callback'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:338:in `callback'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:330:in `callback'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:243:in `create_or_update'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/base.rb:1491:in `save_without_validation'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:744:in `save_without_transactions'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:120:in `save'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:51:in `transaction'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:86:in `transaction'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:112:in `transaction'
from ./script/../config/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:120:in `save'
from (irb):4
I had a quick look and it seems that it's caused from line 587 of associations.rb. association.nil? is returning false when the association is nil. Weird.
My models look like this:
class Person < ActiveRecord::Base
has_one :user
def validate
if user # The error goes away if I remove the if statement.
# ...
end
end
end
class User < ActiveRecord::Base
belongs_to :person
end
I can try and provide a failing test if needed.