2017-05-05 69 views
2

我試圖讓它如此,以便如果用戶更改兩個布爾變量(buyerseller,它們可以在任一方向更改以觸發該操作)它會重置第三個變量status_confirmedfalse的狀態。Rails堆棧級別太深用after_update方法

我在user模型如下:

after_update :reset_confirmed 

    def reset_confirmed 
    if self.buyer_changed? || self.seller_changed? 
     self.update_attributes(status_confirmed: false) 
    end 
    end 

從我可以理解stack level too deep錯誤是由於無限循環或遞歸,我無法找到。任何人都可以看到我要去哪裏嗎?

回答

6

2的方式來處理這個問題:

after_update :reset_confirmed 
def reset_confirmed 
    self.update_column(:status_confirmed, false) if self.buyer_changed? || self.seller_changed? 
end 

update_attributeupdate_column是什麼會幫助你,因爲後者skips回調,如果任何的區別。

OR

before_save :reset_confirmed 
def reset_confirmed 
    self.status_confirmed = false if self.buyer_changed? || self.seller_changed? 
end 

在這裏,你只是在保存到數據庫之前分配一個值,所以......

希望它可以幫助..

+0

這是完美的。謝謝! – Liz

相關問題