class method
self.update_counters
Ruby on Rails 2.2.3
Since v2.2.3 Last seen in v2.3.18Available in: v2.2.3 v2.3.18
Signature
self.update_counters(id, counters)
A generic “counter updater” implementation, intended primarily to be used by increment_counter and decrement_counter, but which may also be useful on its own. It simply does a direct SQL update for the record with the given ID, altering the given hash of counters by the amount given by the corresponding value:
Parameters
-
id- The id of the object you wish to update a counter on. -
counters- An Array of Hashes containing the names of the fields to update as keys and the amount to update the field by as values.
Examples
# For the Post with id of 5, decrement the comment_count by 1, and # increment the action_count by 1 Post.update_counters 5, :comment_count => -1, :action_count => 1 # Executes the following SQL: # UPDATE posts # SET comment_count = comment_count - 1, # action_count = action_count + 1 # WHERE id = 5
Parameters
-
idreq -
countersreq
Source
# File activerecord/lib/active_record/base.rb, line 903
def update_counters(id, counters)
updates = counters.inject([]) { |list, (counter_name, increment)|
sign = increment < 0 ? "-" : "+"
list << "#{connection.quote_column_name(counter_name)} = COALESCE(#{connection.quote_column_name(counter_name)}, 0) #{sign} #{increment.abs}"
}.join(", ")
update_all(updates, "#{connection.quote_column_name(primary_key)} = #{quote_value(id)}")
end
Defined in activerecord/lib/active_record/base.rb line 903
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::Base