vendor/bundle/gems/activerecord-4.0.0/lib/active_record/relation.rb
# 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
# <tt>:dependent</tt> rules defined on associations are not honored. Returns the
# number of rows affected.
#
#   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 <tt>before_*</tt> or
# +after_destroy+ callbacks, use the +destroy_all+ method instead.
#
# If a limit scope is supplied, +delete_all+ raises an ActiveRecord error:
#
#   Post.limit(100).delete_all
#   # => ActiveRecord::ActiveRecordError: delete_all doesn't support limit scope
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.



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.

If a limit scope is supplied, +delete_all+ raises an ActiveRecord error.


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 . 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 . If a limit scope is supplied + delete_all + raises an ActiveRecord error .
def delete_all(conditions = nil)
      raise ActiveRecordError.new("delete_all doesn't support limit scope") if self.limit_value
      if conditions
        where(conditions).delete_all
      else
        stmt = Arel::DeleteManager.new(arel.engine)
        stmt.from(table)
        if with_default_scope.joins_values.any?
          @klass.connection.join_to_delete(stmt, arel, table[primary_key])
        else
          stmt.wheres = arel.constraints
        end
        affected = @klass.connection.delete(stmt, 'SQL', bind_values)
        reset
        affected
      end
    end
def delete_all ( conditions = nil ) raise ActiveRecordError . new ( "delete_all doesn't support limit scope" ) if self . limit_value if conditions where ( conditions ) . delete_all else stmt = Arel :: DeleteManager . new ( arel . engine ) stmt . from ( table ) if with_default_scope . joins_values . any? @klass . connection . join_to_delete ( stmt , arel , table [ primary_key ] ) else stmt . wheres = arel . constraints end affected = @klass . connection . delete ( stmt , 'SQL' , bind_values ) reset affected end end
Deletes the records matching +conditions+ without instantiating the records
first, and hence not calling the +destroy+ method nor invoking callbacks.
Deletes the records matching + conditions + without instantiating the records first and hence not calling the + destroy + method nor invoking callbacks .
conditions
<not_specific>