diff options
author | Jon Leighton <j@jonathanleighton.com> | 2010-10-12 23:42:30 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2010-10-12 23:42:30 +0100 |
commit | 3f2e25805d56440a4ef2a7a9ae6b99be04e6357b (patch) | |
tree | 0088a1253551346dfc14ede47724c0c471ad8faf | |
parent | e8874318b7a025ffd30df1a53c403eb9d8912c9f (diff) | |
download | rails-3f2e25805d56440a4ef2a7a9ae6b99be04e6357b.tar.gz rails-3f2e25805d56440a4ef2a7a9ae6b99be04e6357b.tar.bz2 rails-3f2e25805d56440a4ef2a7a9ae6b99be04e6357b.zip |
Some small tweaks on the last commit
-rw-r--r-- | activerecord/lib/active_record/associations.rb | 22 | ||||
-rw-r--r-- | activerecord/lib/active_record/associations/alias_tracker.rb | 9 |
2 files changed, 12 insertions, 19 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index d0d1eeec45..41f882743c 100644 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -2239,25 +2239,13 @@ module ActiveRecord protected - def table_alias_for(reflection) - name = pluralize(reflection.name) + def table_alias_for(reflection, join = false) + name = alias_tracker.pluralize(reflection.name) name << "_#{parent_table_name}" - name << "_join" if reflection != self.reflection + name << "_join" if join name end - def pluralize(table_name) - ActiveRecord::Base.pluralize_table_names ? table_name.to_s.pluralize : table_name - end - - def table_name_and_alias_for(table_name, table_alias) - "#{table_name} #{table_alias if table_name != table_alias}".strip - end - - def table_name_and_alias - table_name_and_alias_for(table_name, aliased_table_name) - end - def interpolate_sql(sql) instance_eval("%@#{sql.gsub('@', '\@')}@", __FILE__, __LINE__) end @@ -2271,7 +2259,7 @@ module ActiveRecord @tables = through_reflection_chain.map do |reflection| aliased_table_name = alias_tracker.aliased_name_for( reflection.table_name, - table_alias_for(reflection) + table_alias_for(reflection, reflection != self.reflection) ) table = Arel::Table.new( @@ -2284,7 +2272,7 @@ module ActiveRecord if reflection.macro == :has_and_belongs_to_many aliased_join_table_name = alias_tracker.aliased_name_for( reflection.options[:join_table], - table_alias_for(reflection) + table_alias_for(reflection, true) ) join_table = Arel::Table.new( diff --git a/activerecord/lib/active_record/associations/alias_tracker.rb b/activerecord/lib/active_record/associations/alias_tracker.rb index f48efabec2..10e90ec117 100644 --- a/activerecord/lib/active_record/associations/alias_tracker.rb +++ b/activerecord/lib/active_record/associations/alias_tracker.rb @@ -2,11 +2,12 @@ require 'active_support/core_ext/string/conversions' module ActiveRecord module Associations - # Keeps track of table aliases for ActiveRecord::Associations::ClassMethods::JoinDependency + # Keeps track of table aliases for ActiveRecord::Associations::ClassMethods::JoinDependency and + # ActiveRecord::Associations::ThroughAssociationScope class AliasTracker # :nodoc: # other_sql is some other sql which might conflict with the aliases we assign here. Therefore # we store other_sql so that we can scan it before assigning a specific name. - def initialize(other_sql) + def initialize(other_sql = nil) @aliases = Hash.new @other_sql = other_sql.to_s.downcase end @@ -36,6 +37,10 @@ module ActiveRecord end end end + + def pluralize(table_name) + ActiveRecord::Base.pluralize_table_names ? table_name.to_s.pluralize : table_name + end private |