1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

fix ActiveRecord destroy_all so it returns destroyed records

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
Mislav Marohnić 2010-07-08 13:58:23 +02:00 committed by Jeremy Kemper
parent 951dbf06b4
commit 00f1cd71a9
4 changed files with 23 additions and 12 deletions

View file

@ -253,9 +253,10 @@ module ActiveRecord
# See destroy for more info.
def destroy_all
load_target
destroy(@target)
reset_target!
reset_named_scopes_cache!
destroy(@target).tap do
reset_target!
reset_named_scopes_cache!
end
end
def create(attrs = {})

View file

@ -213,8 +213,7 @@ module ActiveRecord
if conditions
where(conditions).destroy_all
else
to_a.each {|object| object.destroy}
reset
to_a.each {|object| object.destroy }.tap { reset }
end
end

View file

@ -817,8 +817,11 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
def test_destroy_all
force_signal37_to_load_all_clients_of_firm
assert !companies(:first_firm).clients_of_firm.empty?, "37signals has clients after load"
companies(:first_firm).clients_of_firm.destroy_all
clients = companies(:first_firm).clients_of_firm.to_a
assert !clients.empty?, "37signals has clients after load"
destroyed = companies(:first_firm).clients_of_firm.destroy_all
assert_equal clients.sort_by(&:id), destroyed.sort_by(&:id)
assert destroyed.all? { |client| client.frozen? }, "destroyed clients should be frozen"
assert companies(:first_firm).clients_of_firm.empty?, "37signals has no clients after destroy all"
assert companies(:first_firm).clients_of_firm(true).empty?, "37signals has no clients after destroy all and refresh"
end

View file

@ -651,16 +651,24 @@ class BasicsTest < ActiveRecord::TestCase
end
def test_destroy_all
original_count = Topic.count
topics_by_mary = Topic.count(:conditions => mary = "author_name = 'Mary'")
conditions = "author_name = 'Mary'"
topics_by_mary = Topic.all(:conditions => conditions, :order => 'id')
assert ! topics_by_mary.empty?
Topic.destroy_all mary
assert_equal original_count - topics_by_mary, Topic.count
assert_difference('Topic.count', -topics_by_mary.size) do
destroyed = Topic.destroy_all(conditions).sort_by(&:id)
assert_equal topics_by_mary, destroyed
assert destroyed.all? { |topic| topic.frozen? }, "destroyed topics should be frozen"
end
end
def test_destroy_many
clients = Client.find([2, 3], :order => 'id')
assert_difference('Client.count', -2) do
Client.destroy([2, 3])
destroyed = Client.destroy([2, 3]).sort_by(&:id)
assert_equal clients, destroyed
assert destroyed.all? { |client| client.frozen? }, "destroyed clients should be frozen"
end
end