代码之家  ›  专栏  ›  技术社区  ›  tybro0103

Rails验证虚拟属性

  •  6
  • tybro0103  · 技术社区  · 14 年前

    我这个模型:

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

    每当我提交创建此模型的表单时,都会收到以下错误:

    未定义的方法<bunny:0x103624338>

    2 回复  |  直到 14 年前
        1
  •  2
  •   tybro0103    14 年前

    我通过将此方法添加到我的兔子模型中来解决此问题:

    def number_before_type_cast
        number
    end
    

    我不喜欢它,但我想在有人提出更好的解决方案之前,它会起作用的。

        2
  •  1
  •   Matt    14 年前

    Rails生成 FIELDNAME_before_type_cast 在每个字段的模型中。它将表单中的值存储为字符串,然后将其转换(转换)为数字(例如,它可能是日期)。此强制转换发生在保存之前,但在验证之后。

    因此,在执行该转换之前进行验证时,必须使用“before type cast”值来获取该值。因为这不是为您的属性生成的,所以失败了。