aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-03-05 22:32:49 +0000
committerJon Leighton <j@jonathanleighton.com>2011-03-05 22:32:49 +0000
commitb7f1b3641afe0ff4f3cd344815c6f7bb58821e9e (patch)
tree34558d5f8832fd7ddc37d1950bdb1600f5b27d97 /activerecord
parent7fddb942624478a23173dfa379f7ade6a0fc9218 (diff)
downloadrails-b7f1b3641afe0ff4f3cd344815c6f7bb58821e9e.tar.gz
rails-b7f1b3641afe0ff4f3cd344815c6f7bb58821e9e.tar.bz2
rails-b7f1b3641afe0ff4f3cd344815c6f7bb58821e9e.zip
Use Base#type_condition in JoinAssociation
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/associations/join_dependency/join_association.rb19
-rw-r--r--activerecord/lib/active_record/base.rb4
2 files changed, 6 insertions, 17 deletions
diff --git a/activerecord/lib/active_record/associations/join_dependency/join_association.rb b/activerecord/lib/active_record/associations/join_dependency/join_association.rb
index 5da3416023..fc8e75b10d 100644
--- a/activerecord/lib/active_record/associations/join_dependency/join_association.rb
+++ b/activerecord/lib/active_record/associations/join_dependency/join_association.rb
@@ -123,9 +123,11 @@ module ActiveRecord
end
conditions << table[key].eq(foreign_table[foreign_key])
-
conditions << reflection_conditions(index, table)
- conditions << sti_conditions(reflection, table)
+
+ if reflection.klass.finder_needs_type_condition?
+ conditions << reflection.klass.send(:type_condition, table)
+ end
ands = relation.create_and(conditions.flatten.compact)
@@ -222,19 +224,6 @@ module ActiveRecord
end
end
- def sti_conditions(reflection, table)
- unless reflection.klass.descends_from_active_record?
- sti_column = table[reflection.klass.inheritance_column]
- sti_condition = sti_column.eq(reflection.klass.sti_name)
- subclasses = reflection.klass.descendants
-
- # TODO: use IN (...), or possibly AR::Base#type_condition
- subclasses.inject(sti_condition) { |attr,subclass|
- attr.or(sti_column.eq(subclass.sti_name))
- }
- end
- end
-
end
end
end
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index b3204b2bda..baf82bedd3 100644
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -973,8 +973,8 @@ module ActiveRecord #:nodoc:
relation
end
- def type_condition
- sti_column = arel_table[inheritance_column.to_sym]
+ def type_condition(table = arel_table)
+ sti_column = table[inheritance_column.to_sym]
sti_names = ([self] + descendants).map { |model| model.sti_name }
sti_column.in(sti_names)