Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #11586 (new defect)

Opened 8 months ago

Creating a new object via an association causes dirty.rb to fail

Reported by: bryansray Assigned to: core
Priority: low Milestone: 2.x
Component: ActiveRecord Version: edge
Severity: normal Keywords: dirty activerecord
Cc:

Description

This is my first time using Trac and I'm fairly new to the Ruby and Rails world, but this seemed like a straight forward bug in regards to the Dirty objects.

class Page < ActiveRecord::Base
  has_one :content, :as => :owner
end

class Content < ActiveRecord::Base
  # This has a "text" column
end

This errors out when doing something as simple as:

p = Page.new
p.build_content(:text => "Hello")

The error returned is:

# NoMethodError: You have a nil object when you didn't expect it!
# You might have expected an instance of Array.
# The error occurred while evaluating nil.include?
#   from Tempo/vendor/rails/activerecord/lib/active_record/dirty.rb:118:in `write_attribute'
#   from Tempo/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:200:in `text='
#   from Tempo/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:229:in `send'
#   from Tempo/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:229:in `method_missing'
#   from Tempo/vendor/rails/activerecord/lib/active_record/base.rb:2313:in `send'
#   from Tempo/vendor/rails/activerecord/lib/active_record/base.rb:2313:in `attributes='
#   from Tempo/vendor/rails/activerecord/lib/active_record/base.rb:2312:in `each'
#   from Tempo/vendor/rails/activerecord/lib/active_record/base.rb:2312:in `attributes='
#   from Tempo/vendor/rails/activerecord/lib/active_record/base.rb:2097:in `initialize'
#   from Tempo/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb:18:in `new'
#   from Tempo/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb:18:in `build'
#   from Tempo/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb:84:in `new_record'
#   from Tempo/vendor/rails/activerecord/lib/active_record/base.rb:1821:in `with_scope'
#   from Tempo/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb:84:in `send'
#   from Tempo/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb:84:in `new_record'
#   from Tempo/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb:18:in `build'
#   from Tempo/vendor/rails/activerecord/lib/active_record/associations.rb:1225:in `send'
#   from Tempo/vendor/rails/activerecord/lib/active_record/associations.rb:1225:in `build_content'

Thanks for any help and/or input on resolving this issue.