2012-07-03 2 views
0

Я узнал из некоторых других сообщений, что 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 

ответ

0

Callbacks вызывается после создания и после уничтожения являются after_create и after_destroy, как показано здесь: http://guides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks

Итак, для того, чтобы запустить что-то после того, как некоторые из этих событий, вы можете сделать это:

after_create :run_something 
after_destroy :run_something 

def run_something 
    # ... 
end 
+0

Do Ineed беспокоиться о таблице resource_tag? – Tallboy

+0

Хорошо спасибо! так что это мой окончательный код: 'after_create: add_favorite,: upvote_submitted_resource' ---- ' after_save: cache_resource_count_on_tags' ---- 'after_destroy: cache_resource_count_on_tags' – Tallboy

Смежные вопросы