diff options
author | Jon Leighton <j@jonathanleighton.com> | 2012-03-30 03:25:30 -0700 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2012-03-30 03:25:30 -0700 |
commit | 3a8c54396ea3965eb7601501d7bb9618ff305728 (patch) | |
tree | 18044d98cd07e0619efa4d416bc6b9dd74a347e0 /activerecord | |
parent | 7dd7d76b86b2168b39fb7f0c359d84ea6df0ce41 (diff) | |
parent | 135d704a55b87b1c5371f4a552151f44964a8fed (diff) | |
download | rails-3a8c54396ea3965eb7601501d7bb9618ff305728.tar.gz rails-3a8c54396ea3965eb7601501d7bb9618ff305728.tar.bz2 rails-3a8c54396ea3965eb7601501d7bb9618ff305728.zip |
Merge pull request #2945 from Casecommons/nested_attributes_module
Nested attribute setters can be overridden.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/nested_attributes.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/nested_attributes_test.rb | 13 | ||||
-rw-r--r-- | activerecord/test/schema/schema.rb | 1 |
3 files changed, 15 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/nested_attributes.rb b/activerecord/lib/active_record/nested_attributes.rb index 6bf0becad8..32a1dae6bc 100644 --- a/activerecord/lib/active_record/nested_attributes.rb +++ b/activerecord/lib/active_record/nested_attributes.rb @@ -288,7 +288,7 @@ module ActiveRecord # def pirate_attributes=(attributes) # assign_nested_attributes_for_one_to_one_association(:pirate, attributes, mass_assignment_options) # end - class_eval <<-eoruby, __FILE__, __LINE__ + 1 + generated_feature_methods.module_eval <<-eoruby, __FILE__, __LINE__ + 1 if method_defined?(:#{association_name}_attributes=) remove_method(:#{association_name}_attributes=) end diff --git a/activerecord/test/cases/nested_attributes_test.rb b/activerecord/test/cases/nested_attributes_test.rb index 09276a034e..0559bbbe9a 100644 --- a/activerecord/test/cases/nested_attributes_test.rb +++ b/activerecord/test/cases/nested_attributes_test.rb @@ -172,6 +172,19 @@ class TestNestedAttributesInGeneral < ActiveRecord::TestCase man.interests_attributes = [{:id => interest.id, :topic => 'gardening'}] assert_equal man.interests.first.topic, man.interests[0].topic end + + def test_allows_class_to_override_setter_and_call_super + mean_pirate_class = Class.new(Pirate) do + accepts_nested_attributes_for :parrot + def parrot_attributes=(attrs) + super(attrs.merge(:color => "blue")) + end + end + mean_pirate = mean_pirate_class.new + mean_pirate.parrot_attributes = { :name => "James" } + assert_equal "James", mean_pirate.parrot.name + assert_equal "blue", mean_pirate.parrot.color + end end class TestNestedAttributesOnAHasOneAssociation < ActiveRecord::TestCase diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index 5e7985c530..d5e4f165cb 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -439,6 +439,7 @@ ActiveRecord::Schema.define do create_table :parrots, :force => true do |t| t.column :name, :string + t.column :color, :string t.column :parrot_sti_class, :string t.column :killer_id, :integer t.column :created_at, :datetime |