aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/reflection.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-06-11 20:13:21 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-07-04 08:00:28 +0900
commitdb3ff259ea7c9b4c3660c0476e847907f90b762e (patch)
tree847afb82d1f50189a00fbb1e7b93003aeaafcd31 /activerecord/lib/active_record/reflection.rb
parent2bfa2c02a891d4817832807343c6f1d56e9bae50 (diff)
downloadrails-db3ff259ea7c9b4c3660c0476e847907f90b762e.tar.gz
rails-db3ff259ea7c9b4c3660c0476e847907f90b762e.tar.bz2
rails-db3ff259ea7c9b4c3660c0476e847907f90b762e.zip
Fix eager loading association with scope including joins
Fixes #28324.
Diffstat (limited to 'activerecord/lib/active_record/reflection.rb')
-rw-r--r--activerecord/lib/active_record/reflection.rb18
1 files changed, 11 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb
index 8ff2f50fdb..a453ca55c7 100644
--- a/activerecord/lib/active_record/reflection.rb
+++ b/activerecord/lib/active_record/reflection.rb
@@ -185,19 +185,23 @@ module ActiveRecord
end
deprecate :scope_chain
- def join_scope(table, foreign_table, foreign_klass)
- predicate_builder = predicate_builder(table)
- scope_chain_items = join_scopes(table, predicate_builder)
- klass_scope = klass_join_scope(table, predicate_builder)
-
+ def build_join_constraint(table, foreign_table)
key = join_keys.key
foreign_key = join_keys.foreign_key
- klass_scope.where!(table[key].eq(foreign_table[foreign_key]))
+ constraint = table[key].eq(foreign_table[foreign_key])
if klass.finder_needs_type_condition?
- klass_scope.where!(klass.send(:type_condition, table))
+ table.create_and([constraint, klass.send(:type_condition, table)])
+ else
+ constraint
end
+ end
+
+ def join_scope(table, foreign_klass)
+ predicate_builder = predicate_builder(table)
+ scope_chain_items = join_scopes(table, predicate_builder)
+ klass_scope = klass_join_scope(table, predicate_builder)
if type
klass_scope.where!(type => foreign_klass.base_class.sti_name)