【问题标题】:Rails validating virtual attributesRails 验证虚拟属性
【发布时间】:2010-10-12 16:22:30
【问题描述】:

我这个模型:

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

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

#<0x103624338>

    标签: ruby-on-rails ruby validation activerecord model


    【解决方案1】:

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

    def number_before_type_cast
        number
    end
    

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

    【讨论】:

    • 是的,我没有更好的主意。
    【解决方案2】:

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

    因此,当在执行转换之前发生验证时,它必须使用“类型转换之前”值来获取值。由于这不是为您的属性生成的,因此它会失败。

    【讨论】:

    • 我明白了……嗯,这是一个很好的解释……有没有好的解决方案?
    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多