2015-09-03 64 views
0

我似乎無法創建以下模型:Rails的驗證枚舉

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 

然後,當我進入軌道控制檯,並嘗試創建一個新的規則:

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

你並不需要驗證您枚舉(我相信開始的Rails 4.1以上版本),因爲你會得到一個ArgumentError每當你嘗試分配以前沒有指定值:

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

以下是核心Rails開發人員在實施更改時的一些discussion。希望有所幫助!