如何使用MongoID validates_inclusion_of

时间:2011-07-10 15:08:29

标签: ruby-on-rails-3 validation 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用于数组吗?

1 个答案:

答案 0 :(得分:4)

您的字段值是一个数组(field :foo, :type => Array) 验证期望字段不是用于检查其包含的数组。 通过您的示例验证是检查['foo','bar']。include?(['bar'])#=>假

因此,请在validates_inclusion_of:

中修正您的:in选项
validates_inclusion_of :foo, in: [['foo'], ['bar']]