2017-05-05 8 views
2

ユーザーが2つのブール変数(buyerseller)のいずれかを変更した場合、アクションをトリガするためにどちらかの方向に変更することができます。第3の変数status_confirmedfalseのステータス。私は私のuserモデルでは、以下のいるRailsスタックレベルがあまりにも深いafter_updateメソッド

:私はstack level too deepエラーを理解することができるものから

after_update :reset_confirmed 

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

は、私が見つけることができない、無限ループや再帰、によるものです。誰かが私が間違っているのを見ることができますか?これを処理する

答えて

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 

、あなたはちょうどそれがDBへ保存する前に値を割り当てるので、...されている

これは完璧です

+0

...それがお役に立てば幸いです。ありがとうございました! – Liz

関連する問題