diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2017-06-27 18:47:42 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2017-06-27 18:47:42 +0900 |
commit | 23bcc6578e28355cc7258c744bcb26c0c80524ef (patch) | |
tree | feac5c96d3e473210c89f97829d041ace2f551ed /activerecord/lib/active_record/reflection.rb | |
parent | 61cc630ac7e7f8554dc049a3e5a2509c00303ef8 (diff) | |
download | rails-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.rb | 11 |
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 |