mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Make Relation#destroy_all handle all the cases
This commit is contained in:
parent
8a1be22849
commit
8f0f02a166
2 changed files with 34 additions and 34 deletions
|
@ -556,7 +556,7 @@ module ActiveRecord #:nodoc:
|
||||||
end
|
end
|
||||||
alias :colorize_logging= :colorize_logging
|
alias :colorize_logging= :colorize_logging
|
||||||
|
|
||||||
delegate :find, :first, :last, :all, :to => :scoped
|
delegate :find, :first, :last, :all, :destroy_all, :to => :scoped
|
||||||
delegate :select, :group, :order, :limit, :joins, :where, :preload, :eager_load, :includes, :from, :lock, :readonly, :having, :to => :scoped
|
delegate :select, :group, :order, :limit, :joins, :where, :preload, :eager_load, :includes, :from, :lock, :readonly, :having, :to => :scoped
|
||||||
delegate :count, :average, :minimum, :maximum, :sum, :calculate, :to => :scoped
|
delegate :count, :average, :minimum, :maximum, :sum, :calculate, :to => :scoped
|
||||||
|
|
||||||
|
@ -773,36 +773,6 @@ module ActiveRecord #:nodoc:
|
||||||
relation.update(sanitize_sql_for_assignment(updates))
|
relation.update(sanitize_sql_for_assignment(updates))
|
||||||
end
|
end
|
||||||
|
|
||||||
# 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)
|
|
||||||
where(conditions).destroy_all
|
|
||||||
end
|
|
||||||
|
|
||||||
# Deletes the records matching +conditions+ without instantiating the records first, and hence not
|
# Deletes the records matching +conditions+ without instantiating the records first, and hence not
|
||||||
# calling the +destroy+ method nor invoking callbacks. This is a single SQL DELETE statement that
|
# calling the +destroy+ method nor invoking callbacks. This is a single SQL DELETE statement that
|
||||||
# goes straight to the database, much more efficient than +destroy_all+. Be careful with relations
|
# goes straight to the database, much more efficient than +destroy_all+. Be careful with relations
|
||||||
|
|
|
@ -84,10 +84,40 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy_all
|
# 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}
|
to_a.each {|object| object.destroy}
|
||||||
reset
|
reset
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def delete_all
|
def delete_all
|
||||||
arel.delete.tap { reset }
|
arel.delete.tap { reset }
|
||||||
|
|
Loading…
Reference in a new issue