diff options
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/associations/through_association.rb | 15 | ||||
-rw-r--r-- | activerecord/lib/active_record/reflection.rb | 8 |
2 files changed, 13 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/associations/through_association.rb b/activerecord/lib/active_record/associations/through_association.rb index 806397f83a..54673b74f7 100644 --- a/activerecord/lib/active_record/associations/through_association.rb +++ b/activerecord/lib/active_record/associations/through_association.rb @@ -4,9 +4,20 @@ module ActiveRecord module Associations # = Active Record Through Association module ThroughAssociation #:nodoc: - delegate :source_reflection, :through_reflection, to: :reflection + delegate :source_reflection, to: :reflection private + def through_reflection + @through_reflection ||= begin + refl = reflection.through_reflection + + while refl.through_reflection? + refl = refl.through_reflection + end + + refl + end + end # We merge in these scopes for two reasons: # @@ -68,7 +79,7 @@ module ActiveRecord end def foreign_key_present? - through_reflection.belongs_to_or_through? && !owner[through_reflection.foreign_key].nil? + through_reflection.belongs_to? && !owner[through_reflection.foreign_key].nil? end def ensure_mutable diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb index 7b53f9c15c..9e32b69786 100644 --- a/activerecord/lib/active_record/reflection.rb +++ b/activerecord/lib/active_record/reflection.rb @@ -504,10 +504,6 @@ module ActiveRecord @association_scope_cache.clear end - def belongs_to_or_through? - belongs_to? - end - def nested? false end @@ -840,10 +836,6 @@ module ActiveRecord source_reflection.join_scopes(table, predicate_builder) + super end - def belongs_to_or_through? - through_reflection.belongs_to_or_through? - end - def has_scope? scope || options[:source_type] || source_reflection.has_scope? || |