2012-12-07 34 views
1

我試圖做一個after_save的條件回調軌回調不工作

after_save :change_rel_status, :if => :relation_type_id == 1 

def change_rel_status 
    self.status = "Confirmed" 
    self.save 
end 

但我得到的錯誤信息undefined method after_save for false:FalseClass

{"utf8"=>"✓", 
"_method"=>"put", 
"authenticity_token"=>"f4IN...=", 
"relationship"=>{"relation_type_id"=>"1", 
"category_ids"=>[""]}, 
"commit"=>"Update Relationship", 
"id"=>"19"} 

我不知道這是否是因爲形式也有其他屬性來自未更新的其他模型?

謝謝。

回答

0

我可以建議更簡單的東西:

before_save :change_rel_status 

def change_rel_status 
    if params[:relationship][:relation_type_id] == 1 
    self.status = "Confirmed" 
    end 
end 
+0

感謝,但同樣deep'返回錯誤味精'棧級別。我認爲把條件放在回調本身上會更好,所以它不會每次都進行回調。 – noob

+1

哦,我的壞! after_save將觸發change_rel_status,它將調用save進入無限循環。好吧,無論哪種方式,它必須檢查條件是否滿足(即是否relation_type_id == 1),所以我不明白它有什麼不同。 –

+0

不用擔心。無論哪種方式,它不工作:P – noob