aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorNathaniel Talbott <nathaniel@terralien.com>2008-09-19 16:42:18 -0400
committerMichael Koziarski <michael@koziarski.com>2008-09-20 14:16:43 +0200
commit9d7f186f746f38367851355fcd301ac24d6f6a51 (patch)
tree4d76a352538ea823b99b27abd9c5efc678fe0b87 /activerecord
parent79f55de9c5e3ff1f8d9e767c5af21ba31be4cfba (diff)
downloadrails-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>
Diffstat (limited to 'activerecord')
-rwxr-xr-xactiverecord/lib/active_record/associations.rb6
-rw-r--r--activerecord/test/cases/associations_test.rb8
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