2014-09-28 141 views
1

我有一個項目對象具有名爲has_instore_image的布爾值,當設置在before_save方法中時,必須設置爲0而不是false。這是爲什麼?這是預期的行爲?我正在使用Rails 3.2.19。有一個布爾值必須設置爲0而不是false

代碼:

class Item < ActiveRecord::Base 

    attr_accessible :has_instore_image 

    before_save :set_has_instore_image 

    def set_has_instore_image 
    if self.instore_images.count>0 
     self.has_instore_image=true 
    else 
     self.has_instore_image=0 
     #self.has_instore_image=false 
    end 
    end 

回答

2

從Rails的文檔上的回調:

If a before_* callback returns false, all the later callbacks and the associated action are cancelled. 

所以會發生什麼是,作爲回調的最後一個表達式的計算結果爲false,則回調鏈被停止並且save操作失敗。

可以彌補這樣的:

def set_has_instore_image 
    if self.instore_images.count>0 
    self.has_instore_image=true 
    else  
    self.has_instore_image=false 
    end 
    true 
end 

事實上,它被認爲是很好的做法,停止所有before_*回調定義返回true避免這個同樣的問題。

相關問題