aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorErnie Miller <ernie@metautonomo.us>2010-05-03 20:47:42 -0400
committerVijay Dev <vijaydev.cse@gmail.com>2010-12-16 01:49:29 +0530
commit5d37ff6bb2b1f948034bf06e450f2fdb8195c4e5 (patch)
tree4f051cd12065f9799f4b5c1016854ee372883de9 /activerecord/lib/active_record
parent7bffa9dd01cdef3088e0d33fabd5fc07eb35c9d9 (diff)
downloadrails-5d37ff6bb2b1f948034bf06e450f2fdb8195c4e5.tar.gz
rails-5d37ff6bb2b1f948034bf06e450f2fdb8195c4e5.tar.bz2
rails-5d37ff6bb2b1f948034bf06e450f2fdb8195c4e5.zip
Fix hm:t to self table aliasing in construct_scope
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/associations/through_association_scope.rb12
1 files changed, 10 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/through_association_scope.rb b/activerecord/lib/active_record/associations/through_association_scope.rb
index 6b7faa9fc3..a55bf6323e 100644
--- a/activerecord/lib/active_record/associations/through_association_scope.rb
+++ b/activerecord/lib/active_record/associations/through_association_scope.rb
@@ -21,9 +21,17 @@ module ActiveRecord
construct_owner_attributes(@reflection)
end
+ def aliased_through_table
+ name = @reflection.through_reflection.table_name
+
+ @reflection.table_name == name ?
+ @reflection.through_reflection.klass.arel_table.alias(name + "_join") :
+ @reflection.through_reflection.klass.arel_table
+ end
+
# Build SQL conditions from attributes, qualified by table name.
def construct_conditions
- table = @reflection.through_reflection.klass.arel_table
+ table = aliased_through_table
conditions = construct_quoted_owner_attributes(@reflection.through_reflection).map do |attr, value|
table[attr].eq(value)
end
@@ -53,7 +61,7 @@ module ActiveRecord
end
def construct_joins
- right = @reflection.through_reflection.klass.arel_table
+ right = aliased_through_table
left = @reflection.klass.arel_table
conditions = []