aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation.rb
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2010-01-20 18:12:50 +0530
committerPratik Naik <pratiknaik@gmail.com>2010-01-20 18:12:50 +0530
commit8f0f02a1667d6a1c948d6c60adf9581ec47376b9 (patch)
treeced1f8c40530344e39e1d323fc439032546a68c3 /activerecord/lib/active_record/relation.rb
parent8a1be228491f433fa8d20be4f485e2159f5ebe59 (diff)
downloadrails-8f0f02a1667d6a1c948d6c60adf9581ec47376b9.tar.gz
rails-8f0f02a1667d6a1c948d6c60adf9581ec47376b9.tar.bz2
rails-8f0f02a1667d6a1c948d6c60adf9581ec47376b9.zip
Make Relation#destroy_all handle all the cases
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r--activerecord/lib/active_record/relation.rb36
1 files changed, 33 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index decde50427..8942690b49 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -84,9 +84,39 @@ module ActiveRecord
end
end
- def destroy_all
- to_a.each {|object| object.destroy}
- reset
+ # Destroys the records matching +conditions+ by instantiating each
+ # record and calling its +destroy+ method. Each object's callbacks are
+ # executed (including <tt>:dependent</tt> association options and
+ # +before_destroy+/+after_destroy+ Observer methods). Returns the
+ # collection of objects that were destroyed; each will be frozen, to
+ # reflect that no changes should be made (since they can't be
+ # persisted).
+ #
+ # Note: Instantiation, callback execution, and deletion of each
+ # record can be time consuming when you're removing many records at
+ # once. It generates at least one SQL +DELETE+ query per record (or
+ # possibly more, to enforce your callbacks). If you want to delete many
+ # rows quickly, without concern for their associations or callbacks, use
+ # +delete_all+ instead.
+ #
+ # ==== Parameters
+ #
+ # * +conditions+ - A string, array, or hash that specifies which records
+ # to destroy. If omitted, all records are destroyed. See the
+ # Conditions section in the introduction to ActiveRecord::Base for
+ # more information.
+ #
+ # ==== Examples
+ #
+ # Person.destroy_all("last_login < '2004-04-04'")
+ # Person.destroy_all(:status => "inactive")
+ def destroy_all(conditions = nil)
+ if conditions
+ where(conditions).destroy_all
+ else
+ to_a.each {|object| object.destroy}
+ reset
+ end
end
def delete_all