2012-07-16 179 views
0

現在我正在研究一個具有Event模型的Rails應用程序,該模型具有Category模型作爲嵌套屬性。Rails嵌套屬性回調

我的Event模型有一個state屬性,如果嵌套類別達到特定數量,則該屬性必須更改爲某個值。

我試圖使用Event模型中的after_update回調來執行此操作,但它不起作用。有人有什麼主意嗎?

回答

0

爲什麼它不起作用?可能是因爲它達到了最大遞歸級別。 嘗試是這樣的:

class Event < ActiveRecord::Base 
    attr_accessor :category_count_state_updated 
    has_many :categories 
    accepts_nested_attributes_for :categories 
    attr_accessible :categories_attributes 
    after_update :update_state 

    private 
    def update_state 
     unless self.category_count_state_updated 
     self.state = 'categories_count_reached' if self.categories.count == 5 
     self.category_count_state_updated = true 
     self.save 
     end 
    end 
end 
+0

謝謝,但實際測試這個時候,我把一個調試器「update_state」方法內,但它不會停在那裏。不知道爲什麼真的。 如果我在測試中保存事件模型並且沒有使用該方法,那麼它可以工作,但這不是一個好的做法。任何想法? 再次感謝! – 2012-07-16 17:29:41

+0

那麼......這個回調從來沒有被調用過,或者只有當你改變至少一個父模型的字段時纔會調用它?也許嘗試將此回調改爲'after_save',因爲這也可能是您的情況。 – 2012-07-16 21:25:58

+0

好的,我解決了這個問題,但以另一種方式做了。我在嵌套模型中添加了after_update回調。當after_update被執行時,它會通知它的父(事件模型),並且一切都很好。謝謝Maciej! 乾杯, 馬丁 – 2012-07-16 23:33:04