diff options
author | Jon Leighton <j@jonathanleighton.com> | 2012-04-25 16:07:31 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2012-04-25 16:07:31 +0100 |
commit | 8b941e977c094bb2121f9eaef73f20392d20f581 (patch) | |
tree | fb61340ada51952ac9975d6c1a30db783cf5a417 /activerecord/lib | |
parent | 98de70e2e12cff98acbc38727e709ff99db331b6 (diff) | |
parent | 365b8b6db750151b786b0a7ef9e65a6824576f1b (diff) | |
download | rails-8b941e977c094bb2121f9eaef73f20392d20f581.tar.gz rails-8b941e977c094bb2121f9eaef73f20392d20f581.tar.bz2 rails-8b941e977c094bb2121f9eaef73f20392d20f581.zip |
Merge remote-tracking branch 'kennyj/fix_5563'
Conflicts:
activerecord/test/cases/associations/belongs_to_associations_test.rb
Diffstat (limited to 'activerecord/lib')
4 files changed, 6 insertions, 4 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/lib/active_record/associations/belongs_to_association.rb b/activerecord/lib/active_record/associations/belongs_to_association.rb index 81c6e400d2..ddfc6f6c05 100644 --- a/activerecord/lib/active_record/associations/belongs_to_association.rb +++ b/activerecord/lib/active_record/associations/belongs_to_association.rb @@ -77,7 +77,7 @@ module ActiveRecord end def stale_state - owner[reflection.foreign_key].to_s + owner[reflection.foreign_key] && owner[reflection.foreign_key].to_s end end end diff --git a/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb b/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb index 2ee5dbbd70..88ce03a3cd 100644 --- a/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb +++ b/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb @@ -27,7 +27,8 @@ module ActiveRecord end def stale_state - [super, owner[reflection.foreign_type].to_s] + foreign_key = super + foreign_key && [foreign_key.to_s, owner[reflection.foreign_type].to_s] end end end diff --git a/activerecord/lib/active_record/associations/through_association.rb b/activerecord/lib/active_record/associations/through_association.rb index fd0e90aaf0..be890e5767 100644 --- a/activerecord/lib/active_record/associations/through_association.rb +++ b/activerecord/lib/active_record/associations/through_association.rb @@ -62,7 +62,7 @@ module ActiveRecord # properly support stale-checking for nested associations. def stale_state if through_reflection.macro == :belongs_to - owner[through_reflection.foreign_key].to_s + owner[through_reflection.foreign_key] && owner[through_reflection.foreign_key].to_s end end |