我有一个模型,其中包含一个可以包含值列表的字段。我希望该列表仅限于一个子集。我想使用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
用于数组吗?
答案 0 :(得分:4)
您的字段值是一个数组(field :foo, :type => Array
)
验证期望字段不是用于检查其包含的数组。
通过您的示例验证是检查['foo','bar']。include?(['bar'])#=>假
因此,请在validates_inclusion_of:
中修正您的:in选项validates_inclusion_of :foo, in: [['foo'], ['bar']]