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:
parent
951dbf06b4
commit
00f1cd71a9
4 changed files with 23 additions and 12 deletions
|
@ -253,10 +253,11 @@ module ActiveRecord
|
|||
# See destroy for more info.
|
||||
def destroy_all
|
||||
load_target
|
||||
destroy(@target)
|
||||
destroy(@target).tap do
|
||||
reset_target!
|
||||
reset_named_scopes_cache!
|
||||
end
|
||||
end
|
||||
|
||||
def create(attrs = {})
|
||||
if attrs.is_a?(Array)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue