diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-02-07 19:40:10 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-02-07 19:44:25 +0900 |
commit | 2e018361c7c51e36d1d98bf770b7456d78dee68b (patch) | |
tree | a0f15f942a5b18e3c692965ac345f9f4010bb668 /activerecord/lib/active_record/relation.rb | |
parent | 973b62dcddd2db45047d32321e6887c841fc5ccf (diff) | |
download | rails-2e018361c7c51e36d1d98bf770b7456d78dee68b.tar.gz rails-2e018361c7c51e36d1d98bf770b7456d78dee68b.tar.bz2 rails-2e018361c7c51e36d1d98bf770b7456d78dee68b.zip |
Refactor around scoping
Don't use `false` as special value to skip to find inherited scope, we
could use `skip_inherited_scope = true`, and move `_scoping` back on
Relation.
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index bab00ef065..ab3d6f7222 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -312,12 +312,12 @@ module ActiveRecord # Please check unscoped if you want to remove all previous scopes (including # the default_scope) during the execution of a block. def scoping - @delegate_to_klass && klass.current_scope ? yield : klass._scoping(self) { yield } + @delegate_to_klass && klass.current_scope(true) ? yield : _scoping(self) { yield } end def _exec_scope(*args, &block) # :nodoc: @delegate_to_klass = true - instance_exec(*args, &block) || self + _scoping(nil) { instance_exec(*args, &block) || self } ensure @delegate_to_klass = false end @@ -632,6 +632,13 @@ module ActiveRecord end private + def _scoping(scope) + previous, klass.current_scope = klass.current_scope(true), scope + yield + ensure + klass.current_scope = previous + end + def _substitute_values(values) values.map do |name, value| attr = arel_attribute(name) |