Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Nested attribute setters can be overridden.
Overriding implementation can call super.
  • Loading branch information
Jonathan Mukai & Peter Jaros authored and Peeja committed Mar 28, 2012
1 parent ddaeb4b commit 135d704
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 1 deletion.
2 changes: 1 addition & 1 deletion activerecord/lib/active_record/nested_attributes.rb
Expand Up @@ -288,7 +288,7 @@ def accepts_nested_attributes_for(*attr_names)
# 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
Expand Down
13 changes: 13 additions & 0 deletions activerecord/test/cases/nested_attributes_test.rb
Expand Up @@ -172,6 +172,19 @@ def test_first_and_array_index_zero_methods_return_the_same_value_when_nested_at
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
Expand Down
1 change: 1 addition & 0 deletions activerecord/test/schema/schema.rb
Expand Up @@ -439,6 +439,7 @@ def create_table(*args, &block)

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
Expand Down

0 comments on commit 135d704

Please sign in to comment.