mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Reset named scope cache whenever the @target is reset
This commit is contained in:
parent
eb063538bd
commit
48634bf59a
2 changed files with 19 additions and 2 deletions
|
@ -105,6 +105,7 @@ module ActiveRecord
|
|||
|
||||
def reset
|
||||
reset_target!
|
||||
reset_named_scopes_cache!
|
||||
@loaded = false
|
||||
end
|
||||
|
||||
|
@ -162,6 +163,7 @@ module ActiveRecord
|
|||
load_target
|
||||
delete(@target)
|
||||
reset_target!
|
||||
reset_named_scopes_cache!
|
||||
end
|
||||
|
||||
# Calculate sum using SQL, not Enumerable
|
||||
|
@ -250,6 +252,7 @@ module ActiveRecord
|
|||
load_target
|
||||
destroy(@target)
|
||||
reset_target!
|
||||
reset_named_scopes_cache!
|
||||
end
|
||||
|
||||
def create(attrs = {})
|
||||
|
@ -406,8 +409,8 @@ module ActiveRecord
|
|||
super
|
||||
end
|
||||
elsif @reflection.klass.scopes[method]
|
||||
@_scopes ||= {}
|
||||
@_scopes[method] ||= with_scope(construct_scope) { @reflection.klass.send(method, *args) }
|
||||
@_named_scopes_cache ||= {}
|
||||
@_named_scopes_cache[method] ||= with_scope(construct_scope) { @reflection.klass.send(method, *args) }
|
||||
else
|
||||
with_scope(construct_scope) do
|
||||
if block_given?
|
||||
|
@ -428,6 +431,10 @@ module ActiveRecord
|
|||
@target = Array.new
|
||||
end
|
||||
|
||||
def reset_named_scopes_cache!
|
||||
@_named_scopes_cache = {}
|
||||
end
|
||||
|
||||
def find_target
|
||||
records =
|
||||
if @reflection.options[:finder_sql]
|
||||
|
|
|
@ -422,6 +422,16 @@ class NamedScopeTest < ActiveRecord::TestCase
|
|||
post.comments.containing_the_letter_e.all # force load
|
||||
assert_no_queries { post.comments.containing_the_letter_e.all }
|
||||
end
|
||||
|
||||
def test_named_scopes_are_reset_on_association_reload
|
||||
post = posts(:welcome)
|
||||
|
||||
[:destroy_all, :reset, :delete_all].each do |method|
|
||||
before = post.comments.containing_the_letter_e
|
||||
post.comments.send(method)
|
||||
assert before.object_id != post.comments.containing_the_letter_e.object_id, "AssociationCollection##{method} should reset the named scopes cache"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DynamicScopeMatchTest < ActiveRecord::TestCase
|
||||
|
|
Loading…
Reference in a new issue