我似乎无法创建以下模型:
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"]}>
答案 0 :(得分:1)
您不需要验证您的枚举(我相信启动Rails 4.1+),因为每当您尝试分配之前未指定的值时,您将获得ArgumentError
:
rule = Rule.new(key: "key", value: "value", comparator: :fff)
ArgumentError: 'fff' is not a valid comparator
来自核心Rails开发人员的一些discussion实施更改时。希望有所帮助!