AssociationCollection#clear can basically just use #delete_all, except it should return self.

This commit is contained in:
Jon Leighton
2011-01-24 23:43:44 +00:00
parent 88df88095c
commit 2e24cf7cc2
2 changed files with 13 additions and 16 deletions

View File

@@ -112,6 +112,13 @@ module ActiveRecord
end
end
# Identical to delete_all, except that the return value is the association (for chaining)
# rather than the records which have been removed.
def clear
delete_all
self
end
# Destroy all the records from this association.
#
# See destroy for more info.
@@ -191,19 +198,6 @@ module ActiveRecord
load_target
end
# Removes all records from this association. Returns +self+ so method calls may be chained.
def clear
unless length.zero? # forces load_target if it hasn't happened already
if @reflection.options[:dependent] == :destroy
destroy_all
else
delete_all
end
end
self
end
def create(attrs = {})
if attrs.is_a?(Array)
attrs.collect { |attr| create(attr) }

View File

@@ -662,8 +662,10 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
def test_delete_all
force_signal37_to_load_all_clients_of_firm
companies(:first_firm).clients_of_firm.create("name" => "Another Client")
assert_equal 2, companies(:first_firm).clients_of_firm.size
companies(:first_firm).clients_of_firm.delete_all
clients = companies(:first_firm).clients_of_firm.to_a
assert_equal 2, clients.count
deleted = companies(:first_firm).clients_of_firm.delete_all
assert_equal clients.sort_by(&:id), deleted.sort_by(&:id)
assert_equal 0, companies(:first_firm).clients_of_firm.size
assert_equal 0, companies(:first_firm).clients_of_firm(true).size
end
@@ -683,11 +685,12 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
client_id = firm.clients_of_firm.first.id
assert_equal 1, firm.clients_of_firm.size
firm.clients_of_firm.clear
cleared = firm.clients_of_firm.clear
assert_equal 0, firm.clients_of_firm.size
assert_equal 0, firm.clients_of_firm(true).size
assert_equal [], Client.destroyed_client_ids[firm.id]
assert_equal firm.clients_of_firm.object_id, cleared.object_id
# Should not be destroyed since the association is not dependent.
assert_nothing_raised do