【问题标题】:Validate that a value is in a certain range, e.g. 1 <= val <=2验证一个值是否在某个范围内,例如1 <= 值 <=2
【发布时间】:2011-06-20 11:10:42
【问题描述】:

我想验证一个数字 :value 在 1 或 2 以内

validates :value, :format => { :with => /1|2/, :message => "Select number.." }

但是,上面的代码在value == 1时验证失败

请确保您的解决方案允许我添加验证消息。

【问题讨论】:

    标签: ruby ruby-on-rails-3 activerecord


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      你正在寻找validates_inclusion_of:

      validates_inclusion_of :value, :in => [1, 2],
        :message => "Select one of %{value}"
      

      您还可以使用(相当新的)shothand form 和 Range 而不是 Array:

      validates :value, :inclusion => { :in => 1..2 }
      

      【讨论】:

      • %{value} 是用户提供的值,而不是您显示的允许选项列表 ([1, 2])。 (我目前正在尝试弄清楚如何自己将允许的选项列表插入到错误消息中......)
      • 顺便说一句,我在这里找到了答案(如何将允许的选项列表插入到错误消息中):stackoverflow.com/a/8528139/47185,以防有人感兴趣
      【解决方案3】:

      如果您希望它是 1 和 2 之间的数字(1.5、1.6839749 等),请执行

      validates_numericality_of :value, :greater_than_or_equal_to => 1, :less_than_or_equal_to => 2, :message => "blah"
      

      可能不是你要找的但值得注意的,

      【讨论】:

      • 正是我需要的。没有其他答案处理小数情况。
      【解决方案4】:

      如果使用inclusion错误信息不好:

      ["Value is not included in the list"]
      

      使用

      validates :value, presence: true, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 10 }
      

      为了更好的错误信息,例如:

      ["Value must be less than or equal to 2"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 2022-06-10
        相关资源
        最近更新 更多