aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/scoping/default.rb
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2015-09-07 16:04:03 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2015-09-07 16:04:03 -0300
commitecb4e4b21b3222b823fa24d4a0598b1f2f63ecfb (patch)
tree22a37eeb9b3418a86b62051b9ece467a45b02443 /activerecord/lib/active_record/scoping/default.rb
parent8c34d106ca66a03a78739c411a2f4ecb9fcad25d (diff)
parent52b2ab9e01dd6d0062c1af46abd2ef9fac2dd584 (diff)
downloadrails-ecb4e4b21b3222b823fa24d4a0598b1f2f63ecfb.tar.gz
rails-ecb4e4b21b3222b823fa24d4a0598b1f2f63ecfb.tar.bz2
rails-ecb4e4b21b3222b823fa24d4a0598b1f2f63ecfb.zip
Merge pull request #21522 from tgxworld/scope_perf
PERF: Scope performance.
Diffstat (limited to 'activerecord/lib/active_record/scoping/default.rb')
-rw-r--r--activerecord/lib/active_record/scoping/default.rb9
1 files changed, 8 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/scoping/default.rb b/activerecord/lib/active_record/scoping/default.rb
index 6454f17fdb..fac566e12b 100644
--- a/activerecord/lib/active_record/scoping/default.rb
+++ b/activerecord/lib/active_record/scoping/default.rb
@@ -6,8 +6,10 @@ module ActiveRecord
included do
# Stores the default scope for the class.
class_attribute :default_scopes, instance_writer: false, instance_predicate: false
+ class_attribute :default_scope_override, instance_predicate: false
self.default_scopes = []
+ self.default_scope_override = nil
end
module ClassMethods
@@ -101,7 +103,12 @@ module ActiveRecord
def build_default_scope(base_rel = nil) # :nodoc:
return if abstract_class?
- if !Base.is_a?(method(:default_scope).owner)
+
+ if self.default_scope_override.nil?
+ self.default_scope_override = !Base.is_a?(method(:default_scope).owner)
+ end
+
+ if self.default_scope_override
# The user has defined their own default scope method, so call that
evaluate_default_scope { default_scope }
elsif default_scopes.any?