diff options
author | kennyj <kennyj@gmail.com> | 2012-03-30 03:51:08 +0900 |
---|---|---|
committer | kennyj <kennyj@gmail.com> | 2012-04-13 02:25:19 +0900 |
commit | 365b8b6db750151b786b0a7ef9e65a6824576f1b (patch) | |
tree | e19ddad03c4792318b4f66f9c07d6ffe3e080c44 /activerecord | |
parent | 0f3901e9101837eaab2daba5b01f67ed7e2c75d5 (diff) | |
download | rails-365b8b6db750151b786b0a7ef9e65a6824576f1b.tar.gz rails-365b8b6db750151b786b0a7ef9e65a6824576f1b.tar.bz2 rails-365b8b6db750151b786b0a7ef9e65a6824576f1b.zip |
Fix #5563. Should reflect the most recent change to either of association / id.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/associations/association.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/associations/belongs_to_associations_test.rb | 11 |
2 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/association.rb b/activerecord/lib/active_record/associations/association.rb index 4e09a43f8e..e75003f261 100644 --- a/activerecord/lib/active_record/associations/association.rb +++ b/activerecord/lib/active_record/associations/association.rb @@ -132,7 +132,8 @@ module ActiveRecord # ActiveRecord::RecordNotFound is rescued within the method, and it is # not reraised. The proxy is \reset and +nil+ is the return value. def load_target - @target ||= find_target if find_target? + @target = find_target if (@stale_state && stale_target?) || find_target? + loaded! unless loaded? target rescue ActiveRecord::RecordNotFound diff --git a/activerecord/test/cases/associations/belongs_to_associations_test.rb b/activerecord/test/cases/associations/belongs_to_associations_test.rb index 9dd041af81..e620b14f94 100644 --- a/activerecord/test/cases/associations/belongs_to_associations_test.rb +++ b/activerecord/test/cases/associations/belongs_to_associations_test.rb @@ -705,4 +705,15 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase assert_equal toy, sponsor.reload.sponsorable end + + def test_reflect_the_most_recent_change + author1, author2 = Author.limit(2) + post = Post.new(:title => "foo", :body=> "bar") + + post.author = author1 + post.author_id = author2.id + + assert post.save + assert_equal post.author_id, author2.id + end end |