diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-01-24 23:43:44 +0000 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2011-01-30 11:58:08 +0000 |
commit | 2e24cf7cc2392c8fa252ef3b4831a4516ae852d6 (patch) | |
tree | 2d58988ca33921ad8823505b66c1479888bd5e0d | |
parent | 88df88095c82cde53501abe2a44f6c1f66c272b4 (diff) | |
download | rails-2e24cf7cc2392c8fa252ef3b4831a4516ae852d6.tar.gz rails-2e24cf7cc2392c8fa252ef3b4831a4516ae852d6.tar.bz2 rails-2e24cf7cc2392c8fa252ef3b4831a4516ae852d6.zip |
AssociationCollection#clear can basically just use #delete_all, except it should return self.
-rw-r--r-- | activerecord/lib/active_record/associations/association_collection.rb | 20 | ||||
-rw-r--r-- | activerecord/test/cases/associations/has_many_associations_test.rb | 9 |
2 files changed, 13 insertions, 16 deletions
diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb index f2997b9db3..8e63159190 100644 --- a/activerecord/lib/active_record/associations/association_collection.rb +++ b/activerecord/lib/active_record/associations/association_collection.rb @@ -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) } diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb index 5904966ee5..e36124a055 100644 --- a/activerecord/test/cases/associations/has_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_associations_test.rb @@ -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 |