mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix two has_one :through errors
* Set the association target on assignment; * Reset target to nil on reset, rather than empty array. Signed-off-by: Michael Koziarski <michael@koziarski.com> [#895 state:committed]
This commit is contained in:
parent
6ec07e0737
commit
9dbde4f5cb
3 changed files with 15 additions and 3 deletions
|
@ -1270,10 +1270,9 @@ module ActiveRecord
|
||||||
association.create_through_record(new_value)
|
association.create_through_record(new_value)
|
||||||
self.send(reflection.name, new_value)
|
self.send(reflection.name, new_value)
|
||||||
else
|
else
|
||||||
association.replace(new_value)
|
association.replace(new_value)
|
||||||
|
instance_variable_set(ivar, new_value.nil? ? nil : association)
|
||||||
end
|
end
|
||||||
|
|
||||||
instance_variable_set(ivar, new_value.nil? ? nil : association)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
define_method("set_#{reflection.name}_target") do |target|
|
define_method("set_#{reflection.name}_target") do |target|
|
||||||
|
|
|
@ -22,6 +22,10 @@ module ActiveRecord
|
||||||
|
|
||||||
def find_target
|
def find_target
|
||||||
super.first
|
super.first
|
||||||
|
end
|
||||||
|
|
||||||
|
def reset_target!
|
||||||
|
@target = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -101,4 +101,13 @@ class HasOneThroughAssociationsTest < ActiveRecord::TestCase
|
||||||
assert_equal clubs(:crazy_club), members[0].sponsor_club
|
assert_equal clubs(:crazy_club), members[0].sponsor_club
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_uninitialized_has_one_through_should_return_nil_for_unsaved_record
|
||||||
|
assert_nil Member.new.club
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_assigning_association_correctly_assigns_target
|
||||||
|
new_member = Member.create(:name => "Chris")
|
||||||
|
new_member.club = new_club = Club.create(:name => "LRUG")
|
||||||
|
assert_equal new_club, new_member.club.target
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue