diff options
author | Nathaniel Talbott <nathaniel@terralien.com> | 2008-09-19 16:42:18 -0400 |
---|---|---|
committer | Michael Koziarski <michael@koziarski.com> | 2008-09-20 14:16:43 +0200 |
commit | 9d7f186f746f38367851355fcd301ac24d6f6a51 (patch) | |
tree | 4d76a352538ea823b99b27abd9c5efc678fe0b87 | |
parent | 79f55de9c5e3ff1f8d9e767c5af21ba31be4cfba (diff) | |
download | rails-9d7f186f746f38367851355fcd301ac24d6f6a51.tar.gz rails-9d7f186f746f38367851355fcd301ac24d6f6a51.tar.bz2 rails-9d7f186f746f38367851355fcd301ac24d6f6a51.zip |
Fixed an error triggered by a reload followed by a foreign key assignment.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
-rwxr-xr-x | activerecord/lib/active_record/associations.rb | 6 | ||||
-rw-r--r-- | activerecord/test/cases/associations_test.rb | 8 |
2 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index 5d91315aad..d7aa4bfa98 100755 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -1268,7 +1268,11 @@ module ActiveRecord if association_proxy_class == BelongsToAssociation define_method("#{reflection.primary_key_name}=") do |target_id| - instance_variable_get(ivar).reset if instance_variable_defined?(ivar) + if instance_variable_defined?(ivar) + if association = instance_variable_get(ivar) + association.reset + end + end write_attribute(reflection.primary_key_name, target_id) end end diff --git a/activerecord/test/cases/associations_test.rb b/activerecord/test/cases/associations_test.rb index 2050d16179..cde451de0e 100644 --- a/activerecord/test/cases/associations_test.rb +++ b/activerecord/test/cases/associations_test.rb @@ -194,6 +194,14 @@ class AssociationProxyTest < ActiveRecord::TestCase assert_equal david, welcome.author end + def test_assigning_association_id_after_reload + welcome = posts(:welcome) + welcome.reload + assert_nothing_raised do + welcome.author_id = authors(:david).id + end + end + def test_reload_returns_assocition david = developers(:david) assert_nothing_raised do |