此问题与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
答案 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 }
我不太了解红宝石(和铁轨),有些情况我不对。但这个解决方案正在运作