我这个模型:Rails的验证虚拟属性
class Bunny < ActiveRecord::Base
attr_accessor :number
validates_presence_of :number
validates_numericality_of :number
end
每当我提交表单创建这个模型我得到以下错误:
未定义的方法`number_before_type_cast”为#<兔子:0x103624338 >
我这个模型:Rails的验证虚拟属性
class Bunny < ActiveRecord::Base
attr_accessor :number
validates_presence_of :number
validates_numericality_of :number
end
每当我提交表单创建这个模型我得到以下错误:
未定义的方法`number_before_type_cast”为#<兔子:0x103624338 >
我加入这个方法我的小兔子模型解决了这一问题:
def number_before_type_cast
number
end
我不喜欢它,但我想它会工作,直到有人张贴一个更好的解决方案。
Rails在模型中为每个字段生成FIELDNAME_before_type_cast
。它将表单中的值存储为字符串,然后在此情况下转换(转换)为数字(例如,它可能是日期)。此转换在保存之前发生,但在验证之后发生。
因此,在执行强制转换之前进行验证时,必须使用“before type cast”值来获取该值。由于这不是针对您的属性生成的,因此失败。
我明白了...那是一个很好的解释...有没有很好的解决方案? – tybro0103 2010-10-12 16:39:33
是的,我没有更好的主意。 – Matt 2010-10-13 08:07:52