(Rails 3.2.3). , , . ActiveRecord:: Base after_update, counter_caches.
ActiveRecord:: Base
lib/fix_counters_update.rb :
module FixUpdateCounters
def fix_updated_counters
self.changes.each {|key, value|
if key =~ /_id/
changed_class = key.sub(/_id/, '')
changed_class.camelcase.constantize.decrement_counter(:"#{self.class.name.underscore.pluralize}_count", value[0]) unless value[0] == nil
changed_class.camelcase.constantize.increment_counter(:"#{self.class.name.underscore.pluralize}_count", value[1]) unless value[1] == nil
end
}
end
end
ActiveRecord::Base.send(:include, FixUpdateCounters)
ActiveModel:: Dirty changes, , , . , , (.. /_id/), , decrement_counter / increment_counter. nil , .
config/initializers/active_record_extensions.rb :
require 'fix_update_counters'
, , :
class Comment < ActiveRecord::Base
after_update :fix_updated_counters
....
end