Rails验证枚举

时间:2015-09-03 14:34:26

标签: ruby-on-rails enums

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

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"]}>

1 个答案:

答案 0 :(得分:1)

您不需要验证您的枚举(我相信启动Rails 4.1+),因为每当您尝试分配之前未指定的值时,您将获得ArgumentError

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

来自核心Rails开发人员的一些discussion实施更改时。希望有所帮助!