instance method
update_all
Ruby on Rails 4.2.9
Since v3.0.20Signature
update_all(updates)
Updates all records in the current relation with details given. This method constructs a single SQL UPDATE statement and sends it straight to the database. It does not instantiate the involved models and it does not trigger Active Record callbacks or validations. Values passed to update_all will not go through ActiveRecord’s type-casting behavior. It should receive only values that can be passed as-is to the SQL database.
Parameters
-
updates- A string, array, or hash representing the SET part of an SQL statement.
Examples
# Update all customers with the given attributes
Customer.update_all wants_email: true
# Update all books with 'Rails' in their title
Book.where('title LIKE ?', '%Rails%').update_all(author: 'David')
# Update all books that match conditions, but limit it to 5 ordered by date
Book.where('title LIKE ?', '%Rails%').order(:created_at).limit(5).update_all(author: 'David')
Parameters
-
updatesreq
Source
# File activerecord/lib/active_record/relation.rb, line 326
def update_all(updates)
raise ArgumentError, "Empty list of attributes to change" if updates.blank?
stmt = Arel::UpdateManager.new(arel.engine)
stmt.set Arel.sql(@klass.send(:sanitize_sql_for_assignment, updates))
stmt.table(table)
stmt.key = table[primary_key]
if joins_values.any?
@klass.connection.join_to_update(stmt, arel)
else
stmt.take(arel.limit)
stmt.order(*arel.orders)
stmt.wheres = arel.constraints
end
bvs = arel.bind_values + bind_values
@klass.connection.update stmt, 'SQL', bvs
end
Defined in activerecord/lib/active_record/relation.rb line 326
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::Relation