diff options
author | Matthew Draper <matthew@trebex.net> | 2016-01-11 16:33:16 +1030 |
---|---|---|
committer | Matthew Draper <matthew@trebex.net> | 2016-01-12 05:43:58 +1030 |
commit | 5c6d3653830465176ed9d37ec210d55d6ab62852 (patch) | |
tree | 227137b5d13ec8c9d698d0bc53a684b4433b497e /activerecord/test/cases/scoping | |
parent | 8ce0175d50f7fafe648afb8342e17c0898e0ff7f (diff) | |
download | rails-5c6d3653830465176ed9d37ec210d55d6ab62852.tar.gz rails-5c6d3653830465176ed9d37ec210d55d6ab62852.tar.bz2 rails-5c6d3653830465176ed9d37ec210d55d6ab62852.zip |
Skip the STI condition when evaluating a default scope
Given a default_scope on a parent of the current class, where that
parent is not the base class, the parent's STI condition would become
attached to the evaluated default scope, and then override the child's
own STI condition.
Instead, we can treat the STI condition as though it is a default scope,
and skip it in this situation: the scope will be merged into the base
relation, which already contains the correct STI condition.
Fixes #22426.
Diffstat (limited to 'activerecord/test/cases/scoping')
-rw-r--r-- | activerecord/test/cases/scoping/default_scoping_test.rb | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/activerecord/test/cases/scoping/default_scoping_test.rb b/activerecord/test/cases/scoping/default_scoping_test.rb index 86316ab476..ad5ca70f36 100644 --- a/activerecord/test/cases/scoping/default_scoping_test.rb +++ b/activerecord/test/cases/scoping/default_scoping_test.rb @@ -459,4 +459,18 @@ class DefaultScopingTest < ActiveRecord::TestCase scope = Bus.all assert_equal scope.where_clause.ast.children.length, 1 end + + def test_sti_conditions_are_not_carried_in_default_scope + ConditionalStiPost.create! body: '' + SubConditionalStiPost.create! body: '' + SubConditionalStiPost.create! title: 'Hello world', body: '' + + assert_equal 2, ConditionalStiPost.count + assert_equal 2, ConditionalStiPost.all.to_a.size + assert_equal 3, ConditionalStiPost.unscope(where: :title).to_a.size + + assert_equal 1, SubConditionalStiPost.count + assert_equal 1, SubConditionalStiPost.all.to_a.size + assert_equal 2, SubConditionalStiPost.unscope(where: :title).to_a.size + end end |