1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Allow ho:through#build when the owner is a new record [#1749 state:resolved]

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
Tristan Dunn 2009-08-09 19:37:12 -04:00 committed by Pratik Naik
parent 0472839d68
commit a0f69722be
2 changed files with 19 additions and 3 deletions

View file

@ -19,8 +19,14 @@ module ActiveRecord
if current_object if current_object
new_value ? current_object.update_attributes(construct_join_attributes(new_value)) : current_object.destroy new_value ? current_object.update_attributes(construct_join_attributes(new_value)) : current_object.destroy
elsif new_value
if @owner.new_record?
self.target = new_value
through_association = @owner.send(:association_instance_get, @reflection.through_reflection.name)
through_association.build(construct_join_attributes(new_value))
else else
@owner.send(@reflection.through_reflection.name, klass.send(:create, construct_join_attributes(new_value))) if new_value @owner.send(@reflection.through_reflection.name, klass.create(construct_join_attributes(new_value)))
end
end end
end end

View file

@ -29,6 +29,16 @@ class HasOneThroughAssociationsTest < ActiveRecord::TestCase
assert_not_nil new_member.club assert_not_nil new_member.club
end end
def test_creating_association_builds_through_record_for_new
new_member = Member.new(:name => "Jane")
new_member.club = clubs(:moustache_club)
assert new_member.current_membership
assert_equal clubs(:moustache_club), new_member.current_membership.club
assert_equal clubs(:moustache_club), new_member.club
assert new_member.save
assert_equal clubs(:moustache_club), new_member.club
end
def test_replace_target_record def test_replace_target_record
new_club = Club.create(:name => "Marx Bros") new_club = Club.create(:name => "Marx Bros")
@member.club = new_club @member.club = new_club