Skip to content

Instantly share code, notes, and snippets.

@mislav
Created December 2, 2009 19:32
Show Gist options
  • Save mislav/247472 to your computer and use it in GitHub Desktop.
Save mislav/247472 to your computer and use it in GitHub Desktop.
One solution to update out-of-sync association counters
def update_counter(record, *names)
updates = names.each_with_object({}) do |name, memo|
counter = "#{name}_count"
diff = record.send(name).count - record.send(counter)
memo[counter] = diff unless diff.zero?
end
record.class.update_counters(record.id, updates) if updates.any?
end
Community.paginated_each(:per_page => 100) do |record|
update_counter(record, :videos, :members, :comments)
end
User.paginated_each(:per_page => 200) do |record|
update_counter(record, :videos)
end
Media.paginated_each(:per_page => 1000) do |record|
update_counter(record, :comments)
update_counter(record, :likes)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment