2010-10-12 91 views
6

我這個模型:Rails的驗證虛擬屬性

class Bunny < ActiveRecord::Base 
    attr_accessor :number 
    validates_presence_of :number 
    validates_numericality_of :number 
end 

每當我提交表單創建這個模型我得到以下錯誤:

未定義的方法`number_before_type_cast」爲#<兔子:0x103624338 >

回答

2

我加入這個方法我的小兔子模型解決了這一問題:

def number_before_type_cast 
    number 
end 

我不喜歡它,但我想它會工作,直到有人張貼一個更好的解決方案。

+0

是的,我沒有更好的主意。 – Matt 2010-10-13 08:07:52

1

Rails在模型中爲每個字段生成FIELDNAME_before_type_cast。它將表單中的值存儲爲字符串,然後在此情況下轉換(轉換)爲數字(例如,它可能是日期)。此轉換在保存之前發生,但在驗證之後發生。

因此,在執行強制轉換之前進行驗證時,必須使用「before type cast」值來獲取該值。由於這不是針對您的屬性生成的,因此失敗。

+0

我明白了...那是一個很好的解釋...有沒有很好的解決方案? – tybro0103 2010-10-12 16:39:33