aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2010-10-12 23:42:30 +0100
committerJon Leighton <j@jonathanleighton.com>2010-10-12 23:42:30 +0100
commit3f2e25805d56440a4ef2a7a9ae6b99be04e6357b (patch)
tree0088a1253551346dfc14ede47724c0c471ad8faf /activerecord/lib
parente8874318b7a025ffd30df1a53c403eb9d8912c9f (diff)
downloadrails-3f2e25805d56440a4ef2a7a9ae6b99be04e6357b.tar.gz
rails-3f2e25805d56440a4ef2a7a9ae6b99be04e6357b.tar.bz2
rails-3f2e25805d56440a4ef2a7a9ae6b99be04e6357b.zip
Some small tweaks on the last commit
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/associations.rb22
-rw-r--r--activerecord/lib/active_record/associations/alias_tracker.rb9
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