aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/join_dependency/join_association.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/associations/join_dependency/join_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/join_dependency/join_association.rb22
1 files changed, 14 insertions, 8 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 4121a5b378..0a666598ed 100644
--- a/activerecord/lib/active_record/associations/join_dependency/join_association.rb
+++ b/activerecord/lib/active_record/associations/join_dependency/join_association.rb
@@ -89,14 +89,7 @@ module ActiveRecord
foreign_key = reflection.active_record_primary_key
end
- constraint = table[key].eq(foreign_table[foreign_key])
-
- if reflection.klass.finder_needs_type_condition?
- constraint = table.create_and([
- constraint,
- reflection.klass.send(:type_condition, table)
- ])
- end
+ constraint = build_constraint(reflection, table, key, foreign_table, foreign_key)
relation.from(join(table, constraint))
@@ -111,6 +104,19 @@ module ActiveRecord
relation
end
+ def build_constraint(reflection, table, key, foreign_table, foreign_key)
+ constraint = table[key].eq(foreign_table[foreign_key])
+
+ if reflection.klass.finder_needs_type_condition?
+ constraint = table.create_and([
+ constraint,
+ reflection.klass.send(:type_condition, table)
+ ])
+ end
+
+ constraint
+ end
+
def join_relation(joining_relation)
self.join_type = Arel::OuterJoin
joining_relation.joins(self)