instance method delete_all

Ruby on Rails 7.1.6

Since v3.0.20

Available in: v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.9 v5.2.8.1 v6.0.6 v6.1.7.10 v7.0.10 v7.1.6 v7.2.3 v8.0.4 v8.1.2

Signature

delete_all()

Deletes the records 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.

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.

If an invalid method is supplied, #delete_all raises an ActiveRecordError:

Post.distinct.delete_all
# => ActiveRecord::ActiveRecordError: delete_all doesn't support distinct
Source
# File activerecord/lib/active_record/relation.rb, line 651
    def delete_all
      return 0 if @none

      invalid_methods = INVALID_METHODS_FOR_DELETE_ALL.select do |method|
        value = @values[method]
        method == :distinct ? value : value&.any?
      end
      if invalid_methods.any?
        raise ActiveRecordError.new("delete_all doesn't support #{invalid_methods.join(', ')}")
      end

      arel = eager_loading? ? apply_join_dependency.arel : build_arel
      arel.source.left = table

      group_values_arel_columns = arel_columns(group_values.uniq)
      having_clause_ast = having_clause.ast unless having_clause.empty?
      key = if klass.composite_primary_key?
        primary_key.map { |pk| table[pk] }
      else
        table[primary_key]
      end
      stmt = arel.compile_delete(key, having_clause_ast, group_values_arel_columns)

      klass.connection.delete(stmt, "#{klass} Delete All").tap { reset }
    end

Defined in activerecord/lib/active_record/relation.rb line 651 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::Relation

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close