我从其他一些帖子中发现 cache_counter 不能在 has_many 关联上完成,所以现在我尝试使用回调手动完成。问题是我听说 after_save 对删除不起作用。我希望在创建或销毁某些东西后调用它。我更困惑,因为如果resource_tags被修改它不会正确更新资源我不认为:/
总的来说,我想确保我做对了。
标签有很多资源,资源有很多标签。
我需要最终找出每个标签有多少资源(我不关心每个资源有多少标签)
tag.rb(不确定是否在此处受保护)
has_many :resource_tags
has_many :resources, :through => :resource_tags
attr_accessible :name
attr_protected :resource_count
资源.rb
after_save :cache_resource_count_on_tags
def cache_resource_count_on_tags
self.tags.each {|tag| tag.update_attribute(:resource_count, tag.resources.count)}
end
我的迁移:
class CreateTags < ActiveRecord::Migration
def change
create_table :tags do |t|
t.string :name
t.integer :resources_count, :default => 0
t.timestamps
end
end
end