【问题标题】:rails validate in model that value is inside array[2]rails 在模型中验证值在数组 [2] 内
【发布时间】:2016-10-03 12:10:49
【问题描述】:

这个问题与this one 类似,但这些答案对我不起作用(可能它们已被弃用)。我不想通过赏金重新打开旧问题,因为我有一些不同的论点。就我而言,我有一个这样的数组 allowed_values = [99.50..200] 我试过了:

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

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

更多信息:

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

【问题讨论】:

  • price 数据类型是否为Float/Integer?如果是String 就不行了。

标签: ruby-on-rails arrays validation


【解决方案1】:

问题一定出在你传递allowed_values数组的方式上。

你可以这样做:

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

或者,用一个常数:

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

【讨论】:

  • 它不起作用。它取决于 ruby​​ 或 rails 的版本吗?!
  • @Ulug'bekRo'zimboyev 您使用哪个版本?这在哪种情况下不起作用?你得到什么错误?
  • @Ulug'bekRo'zimboyev 我的问题仍然很热门:您会遇到哪些错误?
  • 它没有给出错误,为什么我说不起作用,因为如果我设置 price=12,它说模型是有效的。这就是为什么我说它不起作用
【解决方案2】:

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

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

所以定义:

allowed_values = (99.50..200)

代替:

allowed_values = [99.50..200]

【讨论】:

    【解决方案3】:

    我找到了解决办法: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 }
    

    我对 ruby​​(和 rails)的了解并不深入,而且在某些情况下我是不正确的。但这个解决方案是有效的

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 2013-11-23
      • 1970-01-01
      • 2017-06-30
      • 2011-01-22
      相关资源
      最近更新 更多