2010-10-12 145 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