2013-07-02 42 views
2

在domainpost.rb我有這樣的:Ruby on Rails的:before_validation

class Domainpost < ActiveRecord::Base 
    attr_accessible :content, :additiona, :registerdate, :expiredate, :registerin, :price 

    belongs_to :user 
    before_save { |domainpost| domainpost.content = content.downcase } 

    before_validation :pricecheck 

    validates :price, allow_blank: false, presence: true 

    default_scope order: 'domainposts.created_at DESC' 

    def pricecheck 
    if price.blank? 
    price = 'no price' 
    end 
end 

和它不是工作 當價格後是空白後保存爲STIL空白, 任何知道我做錯了什麼?

+0

也許你的價格數字格式,因此不能將字符串保存療法è? – bodrovis

+0

@ user2531122是一個局部變量 – Viren

回答

4

它不起作用,因爲不是設置Domainpost實例的price屬性,而是設置一個局部變量。相反,你應該做的:

def pricecheck 
    self.price = 'no price' if price.blank? 
end 
+0

沒有必要明確地把「自我」,因爲在這種情況下,price ='no price'和self.price ='no price'是相等的。在內部pricecheck方法中,self指向正在創建/更新的對象,所以不需要self。 – bodrovis

+5

你錯了。當你使用setter方法時,有必要明確指出消息的接收者。否則,只會設置局部變量。看看這個例子: 'price ='no price'' 'price#=>'no price'' 'self.price#=> nil'。 –

1

正如@Merek Lipka的答案,並@muttonlamb你可以試試這些方法,但我的建議是你的數據庫端

就像你的遷移價格領域根本就定義一個default value

t.[price_data_type],:price,:default => "Your Default value" 

嗯,這會照顧你的支票的模型,我相信