aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-07-18 10:39:09 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-07-19 00:50:40 +0900
commit9aa04315febfb37b50f52471a2837c40313a2d5f (patch)
tree2face8dcc9cc116d9e1c1d20e052e9d95e1ec080
parentd13f54d50a166d49c683f79d49341185788faed8 (diff)
downloadrails-9aa04315febfb37b50f52471a2837c40313a2d5f.tar.gz
rails-9aa04315febfb37b50f52471a2837c40313a2d5f.tar.bz2
rails-9aa04315febfb37b50f52471a2837c40313a2d5f.zip
Fix unscoping `default_scope` for `Preloader`
-rw-r--r--activerecord/lib/active_record/associations/preloader/association.rb12
-rw-r--r--activerecord/test/cases/scoping/default_scoping_test.rb2
2 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/preloader/association.rb b/activerecord/lib/active_record/associations/preloader/association.rb
index 85343040db..698fd29beb 100644
--- a/activerecord/lib/active_record/associations/preloader/association.rb
+++ b/activerecord/lib/active_record/associations/preloader/association.rb
@@ -114,8 +114,18 @@ module ActiveRecord
@reflection_scope ||= reflection.scope_for(klass)
end
+ def klass_scope
+ current_scope = klass.current_scope
+
+ if current_scope && current_scope.empty_scope?
+ klass.unscoped
+ else
+ klass.default_scoped
+ end
+ end
+
def build_scope
- scope = klass.default_scoped
+ scope = klass_scope
if reflection.type
scope.where!(reflection.type => model.base_class.sti_name)
diff --git a/activerecord/test/cases/scoping/default_scoping_test.rb b/activerecord/test/cases/scoping/default_scoping_test.rb
index 83f3868f3f..a8c79628e7 100644
--- a/activerecord/test/cases/scoping/default_scoping_test.rb
+++ b/activerecord/test/cases/scoping/default_scoping_test.rb
@@ -405,6 +405,8 @@ class DefaultScopingTest < ActiveRecord::TestCase
assert_equal post, Post.joins(:special_comments).find(post.id)
assert_equal comments, Post.joins(:special_comments).find(post.id).special_comments
assert_equal comments, Post.eager_load(:special_comments).find(post.id).special_comments
+ assert_equal comments, Post.includes(:special_comments).find(post.id).special_comments
+ assert_equal comments, Post.preload(:special_comments).find(post.id).special_comments
end
end