rails在模型中验证值是否在数组内[2]

时间:2016-10-03 12:10:50

标签: ruby-on-rails arrays validation

此问题与this one类似,但这些答案对我不起作用(可能会被弃用)。我不想通过赏金重新打开旧问题,因为我有一些不同的论点。在我的情况下,我有一个像这样的数组 allowed_values = [99.50..200]我尝试过:

class Thing < ActiveRecord::Base
   validates :price, :inclusion=> { :in => allowed_values }

它不起作用。我通过示例验证here尝试了很多方法。我对编码rails没什么经验。所以,请帮助找到解决方案。

更多信息:

       ruby version: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
       rails version: Rails 4.1.5

3 个答案:

答案 0 :(得分:1)

问题必须与传递allowed_values数组的方式有关。

你可以这样做:

validates :price, inclusion: { in: (99.50..200) }

或者,用常数:

ALLOWED_VALUES = (99.50..200).freeze
validates :price, inclusion: { in: ALLOWED_VALUES }

答案 1 :(得分:1)

[99.50..200]是一个包含单个元素的数组:范围(99.50..200)。

您正在测试该值是否在数组中的对象列表中,但您可能想要测试它是否在该范围内。

所以定义:

allowed_values = (99.50..200)

而不是:

allowed_values = [99.50..200]

答案 2 :(得分:0)

我找到了一个解决方案:How to implement min/max validator in Rails 3?

validates :price, :inclusion=> { :in => allowed_values }

似乎不起作用,验证样式在3版本的rails之后被更改了。我尝试过:

validates_inclusion_of :number, :in => min_price..max_price

如果min_price=10.5 and max_price=11

,此解决方案无效

我的解决方案是:

validates :price, :numericality => { :greater_than_or_equal_to => min_price, :less_than_or_equal_to => :max_price }

我不太了解红宝石(和铁轨),有些情况我不对。但这个解决方案正在运作