Я узнал из некоторых других сообщений, что 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
Do Ineed беспокоиться о таблице resource_tag? – Tallboy
Хорошо спасибо! так что это мой окончательный код: 'after_create: add_favorite,: upvote_submitted_resource' ---- ' after_save: cache_resource_count_on_tags' ---- 'after_destroy: cache_resource_count_on_tags' – Tallboy