ruby-on-rails - rails : How to set different ":message" for each one of the possible errors?

标签 ruby-on-rails validation ruby-on-rails-3

我使用这个验证:

validates_numericality_of :price, :greater_than_or_equal_to => 0, :less_than => 1000000

如何为以下每种情况设置不同的:message

  • 价格 < 0
  • 价格 >= 1000000

最佳答案

假设您使用的是 Rails 3,您还有另一个选择是创建自定义验证器:

# You can put this in lib/better_numericality_validator.rb
class BetterNumericalityValidator < ActiveModel::EachValidator
    def validate_each(record,attribute,value)
        if value < 0
            record.errors[attribute] << "must be greater than or equal to 0"
        elsif value >= 1000000
            record.errors[attribute] << "must be less than 1000000")
        end
    end
end

然后您可以在您的模型中使用自定义验证器:

# In your model.rb
validates :price, :better_numericality => true

这个方法和Anubhaw的回答很相似。但是将逻辑拉出到自定义验证器中可以使您可以轻松地在其他地方重用验证,您可以轻松地单独对验证器进行单元测试,我个人认为 validates :price, :better_numericality => true 使您的模型看起来比其他模型更干净。

关于ruby-on-rails - rails : How to set different ":message" for each one of the possible errors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4468013/

相关文章:

ruby-on-rails - 如何更新 Controller 方法的特定字段值?

ruby-on-rails - 在 Ruby-on-Rails 中使用正则表达式验证特定后缀的电子邮件地址

ruby-on-rails - Rails中的GET方法选项中的button_to

validation - Yii:在其中一条规则返回 FALSE 后,如何中止模型验证?

ruby-on-rails - 在 Rails 3 中替换智能引号、智能撇号和省略号的最佳方法是什么?

ruby-on-rails - friendly_id slug 未生成,但正在调用方法

javascript - 一个html输入类型如何调用两个函数?

php - 表单提交时禁用提交按钮

javascript - 当使用 File.open 编写 json 时,我需要设置 header 吗?

javascript - 使用 Javascript/JQuery/Rails 3 动态添加新行