instance method
delete_all
Ruby on Rails 3.2.22.5
Since v3.0.20Signature
delete_all(conditions = nil)
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 goes straight to the database, much more efficient than destroy_all. Be careful with relations though, in particular :dependent rules defined on associations are not honored. Returns the number of rows affected.
Parameters
-
conditions- Conditions are specified the same way as withfindmethod.
Example
Post.delete_all("person_id = 5 AND (category = 'Something' OR category = 'Else')")
Post.delete_all(["person_id = ? AND (category = ? OR category = ?)", 5, 'Something', 'Else'])
Post.where(:person_id => 5).where(:category => ['Something', 'Else']).delete_all
Both calls delete the affected posts all at once with a single DELETE statement. If you need to destroy dependent associations or call your before_* or after_destroy callbacks, use the destroy_all method instead.
Parameters
-
conditionsopt = nil
Source
# File activerecord/lib/active_record/relation.rb, line 404
def delete_all(conditions = nil)
raise ActiveRecordError.new("delete_all doesn't support limit scope") if self.limit_value
IdentityMap.repository[symbolized_base_class] = {} if IdentityMap.enabled?
if conditions
where(conditions).delete_all
else
statement = arel.compile_delete
affected = @klass.connection.delete(statement, 'SQL', bind_values)
reset
affected
end
end
Defined in activerecord/lib/active_record/relation.rb line 404
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::Relation