【问题标题】:Rails validating enumsRails 验证枚举
【发布时间】:2015-09-03 14:34:25
【问题描述】:

我似乎无法创建以下模型:

class Rule < ActiveRecord::Base
  belongs_to :product

  enum comparator: [:eq, :gt, :gteq, :lt, :lteq, :not_eq, :in, :matches]

  validates :key, presence: true
  validates :value, presence: true

  validates :comparator, inclusion: { in: [:eq, :gt, :gteq, :lt, :lteq, :not_eq, :in, :matches]}
end

然后当我进入 rails 控制台并尝试创建新规则时:

rule = Rule.new(key: "key", value: "value", comparator: :gteq)

我得到以下输出:

=> #<Rule:0x007ff92a4de8f8
id: nil,
key: "key",
value: "value",
comparator: 2,
default: false,
context_id: nil,
created_at: nil,
updated_at: nil>

看起来对象是有效的。但后来我运行rule.valid?,它返回false。 rule.errors 返回:

#<Rule:0x007ff92a4de8f8
 id: nil,
 key: "key",
 value: "value",
 comparator: 2,
 default: false,
 context_id: nil,
 created_at: nil,
 updated_at: nil>,
@messages={:comparator=>["is not included in the list"]}>

【问题讨论】:

    标签: ruby-on-rails enums


    【解决方案1】:

    你不需要验证你的枚举(我相信从 Rails 4.1+ 开始),因为每当你尝试分配一个之前没有指定的值时,你都会得到一个ArgumentError

    rule = Rule.new(key: "key", value: "value", comparator: :fff)
    ArgumentError: 'fff' is not a valid comparator
    

    以下是核心 Rails 开发人员实施更改时的一些 discussion。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2014-10-25
      • 1970-01-01
      • 2015-06-29
      • 2010-09-06
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2011-12-30
      相关资源
      最近更新 更多