aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/reflection.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-06-27 18:47:42 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-06-27 18:47:42 +0900
commit23bcc6578e28355cc7258c744bcb26c0c80524ef (patch)
treefeac5c96d3e473210c89f97829d041ace2f551ed /activerecord/lib/active_record/reflection.rb
parent61cc630ac7e7f8554dc049a3e5a2509c00303ef8 (diff)
downloadrails-23bcc6578e28355cc7258c744bcb26c0c80524ef.tar.gz
rails-23bcc6578e28355cc7258c744bcb26c0c80524ef.tar.bz2
rails-23bcc6578e28355cc7258c744bcb26c0c80524ef.zip
Move constructing polymorphic type to `join_scope` in `Reflection`
Diffstat (limited to 'activerecord/lib/active_record/reflection.rb')
-rw-r--r--activerecord/lib/active_record/reflection.rb11
1 files changed, 7 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb
index c6aa2ed720..4e3359bb4e 100644
--- a/activerecord/lib/active_record/reflection.rb
+++ b/activerecord/lib/active_record/reflection.rb
@@ -185,12 +185,16 @@ module ActiveRecord
end
deprecate :scope_chain
- def join_scope(table)
+ 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)
- scope_chain_items.inject(klass_scope || scope_chain_items.shift, &:merge!)
+ if type
+ klass_scope.where!(type => foreign_klass.base_class.name)
+ end
+
+ scope_chain_items.inject(klass_scope, &:merge!)
end
def join_scopes(table, predicate_builder) # :nodoc:
@@ -207,8 +211,7 @@ module ActiveRecord
scope.joins_values = scope.left_outer_joins_values = [].freeze
}
else
- relation = build_scope(table, predicate_builder)
- klass.send(:build_default_scope, relation)
+ klass.default_scoped(build_scope(table, predicate_builder))
end
end