2011-07-10 47 views
0

我有一個可以包含值列表的字段的模型。我希望該列表僅限於一個子集。我想使用validates_inclusion_of,但可能誤解了驗證。如何使用MongoID validates_inclusion_of

class Profile 
    include Mongoid::Document 
    field :foo, :type => Array 

    validates_inclusion_of :foo, in: %w[foo bar] 
end 

p = Profile.new 
p.valid? #=> false; this is correct, as it should fail on empty lists. 
p.foo = ["bar"] 
p.valid? #=> false; this is incorrect. I would expect it to pass now. 
p.errors #=> {:foo=>["is not included in the list"]} 

我在做什麼錯? validates_inclusion_of可以用於數組嗎?

+2

我會建議爲此編寫一個自定義驗證器,否則維護排列 - 隨着時間的推移,包含列表的組合可能無法管理。 – rubish

回答

4

您的字段值是一個數組(field :foo, :type => Array) 驗證期望字段不是數組以檢查其包含。 你的榜樣驗證檢查[ '富', '酒吧']包括:([ '酒吧'])#=>假

所以糾正你:?在選項validates_inclusion_of:

validates_inclusion_of :foo, in: [['foo'], ['bar']]