diff options
-rw-r--r-- | activerecord/lib/active_record/associations/association_scope.rb | 16 | ||||
-rw-r--r-- | activerecord/lib/active_record/reflection.rb | 10 |
2 files changed, 16 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/associations/association_scope.rb b/activerecord/lib/active_record/associations/association_scope.rb index 198a047e18..9d94822fc5 100644 --- a/activerecord/lib/active_record/associations/association_scope.rb +++ b/activerecord/lib/active_record/associations/association_scope.rb @@ -114,10 +114,12 @@ module ActiveRecord end class ReflectionProxy < SimpleDelegator - attr_accessor :next, :alias_name + attr_accessor :next + attr_reader :alias_name - def alias_candidate(name) - "#{plural_name}_#{name}" + def initialize(reflection, alias_name) + super(reflection) + @alias_name = alias_name end end @@ -125,14 +127,10 @@ module ActiveRecord name = refl.name runtime_reflection = ActiveRecord::Reflection::RuntimeReflection.new(refl, association) alias_name = tracker.aliased_table_for(runtime_reflection.table_name, runtime_reflection.alias_candidate(name)) - runtime_reflection.alias_name = alias_name prev = runtime_reflection refl.chain.drop(1).each { |reflection| - proxy = ReflectionProxy.new(reflection) - - alias_name = tracker.aliased_table_for(proxy.table_name, proxy.alias_candidate(name)) - proxy.alias_name = alias_name - + alias_name = tracker.aliased_table_for(reflection.table_name, reflection.alias_candidate(name)) + proxy = ReflectionProxy.new(reflection, alias_name) prev.next = proxy prev = proxy } diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb index 79c6504a18..111911b575 100644 --- a/activerecord/lib/active_record/reflection.rb +++ b/activerecord/lib/active_record/reflection.rb @@ -165,6 +165,10 @@ module ActiveRecord def constraints scope_chain.flatten end + + def alias_candidate(name) + "#{plural_name}_#{name}" + end end # Base class for AggregateReflection and AssociationReflection. Objects of @@ -936,7 +940,7 @@ module ActiveRecord end class RuntimeReflection < PolymorphicReflection - attr_accessor :next, :alias_name + attr_accessor :next def initialize(reflection, association) @reflection = reflection @@ -962,6 +966,10 @@ module ActiveRecord def alias_candidate(name) "#{plural_name}_#{name}_join" end + + def alias_name + Arel::Table.new(table_name) + end end end end |