2013-03-21 65 views
1

我正在嘗試創建一個before_save以將條目的名稱設置爲創建日期,如果它留空。我得到了它的方法來工作,這裏是我的模型:爲什麼我得到未定義的方法`before_save'爲false:如果在保存之前使用FalseClass?

class Entry < ActiveRecord::Base 
    belongs_to :user 
    has_many :entry_ingredients 
    has_many :ingredients, :through => :entry_ingredients 
    before_save :default_name 

    accepts_nested_attributes_for :ingredients, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true 

    def default_name 
    if self.name.blank? 
     self.name = Time.new 
    else 
     self.name 
    end 
    end 
end 

不過,我認爲是相同的代碼似乎並沒有在before_save工作。基本上,我試圖做到這一點before_save :default_name, :if => self.name.blank?,然後我的方法是,像這樣縮短:

def default_name 
    self.name = Time.new 
end 

爲什麼不說,如果聲明before_save工作?我得到錯誤undefined method before_save'爲false:FalseClass`

回答

3

你不能這樣做,因爲self.name.blank?在第一次評估課程時得到評估。所以你最終得到「:if => false」或「:if => true」或發生錯誤。

before_save :default_name, :if => self.name.blank? 

在同一個文件中,您有怎樣可以做到這一點的例子:

before_save :default_name, :if => lambda { |entry| entry[:name].blank? } 

但是也有其他的選擇。 Check the documentation.

2

你可以這樣做:

before_save :default_name 

    def default_name 
    self.name ||= Time.new 
    end 

或:

before_save :default_name, :unless => :name? 

    def default_name 
    self.name = Time.new 
    end 
相關問題