aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/reflection.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-06-27 20:13:17 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-06-27 20:32:17 +0900
commit442c15f1419ae60e4345866e5af59376a679e9d1 (patch)
tree993145931beba3aff0d463151af068e7cd3c183f /activerecord/lib/active_record/reflection.rb
parent23bcc6578e28355cc7258c744bcb26c0c80524ef (diff)
downloadrails-442c15f1419ae60e4345866e5af59376a679e9d1.tar.gz
rails-442c15f1419ae60e4345866e5af59376a679e9d1.tar.bz2
rails-442c15f1419ae60e4345866e5af59376a679e9d1.zip
Move building constraint to `join_scope` in `Reflection`
Diffstat (limited to 'activerecord/lib/active_record/reflection.rb')
-rw-r--r--activerecord/lib/active_record/reflection.rb13
1 files changed, 11 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb
index 4e3359bb4e..3d3ec862a3 100644
--- a/activerecord/lib/active_record/reflection.rb
+++ b/activerecord/lib/active_record/reflection.rb
@@ -171,7 +171,7 @@ module ActiveRecord
JoinKeys = Struct.new(:key, :foreign_key) # :nodoc:
def join_keys
- get_join_keys klass
+ @join_keys ||= get_join_keys(klass)
end
# Returns a list of scopes that should be applied for this Reflection
@@ -185,11 +185,20 @@ module ActiveRecord
end
deprecate :scope_chain
- def join_scope(table, foreign_klass)
+ 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)
+ key = join_keys.key
+ foreign_key = join_keys.foreign_key
+
+ klass_scope.where!(table[key].eq(foreign_table[foreign_key]))
+
+ if klass.finder_needs_type_condition?
+ klass_scope.where!(klass.send(:type_condition, table))
+ end
+
if type
klass_scope.where!(type => foreign_klass.base_class.name)
end