method
update_counters
rails latest stable - Class:
ActiveRecord::CounterCache::ClassMethods
update_counters(id, counters)public
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 or an array of ids.
-
counters - A Hash containing the names of the fields to update as keys and the amount to update the field by as values.
-
:touch option - Touch timestamp columns when updating. If attribute names are passed, they are updated along with updated_at/on attributes.
Examples
# For the Post with id of 5, decrement the comments_count by 1, and # increment the actions_count by 1 Post.update_counters 5, comments_count: -1, actions_count: 1 # Executes the following SQL: # UPDATE posts # SET comments_count = COALESCE(comments_count, 0) - 1, # actions_count = COALESCE(actions_count, 0) + 1 # WHERE id = 5 # For the Posts with id of 10 and 15, increment the comments_count by 1 Post.update_counters [10, 15], comments_count: 1 # Executes the following SQL: # UPDATE posts # SET comments_count = COALESCE(comments_count, 0) + 1 # WHERE id IN (10, 15) # For the Posts with id of 10 and 15, increment the comments_count by 1 # and update the updated_at value for each counter. Post.update_counters [10, 15], comments_count: 1, touch: true # Executes the following SQL: # UPDATE posts # SET comments_count = COALESCE(comments_count, 0) + 1, # `updated_at` = '2016-10-13T09:59:23-05:00' # WHERE id IN (10, 15)