他のいくつかの投稿から、has_many アソシエーションでは cache_counter を実行できないことがわかったので、コールバックを使用して手動で実行しようとしています。問題は、削除時に 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