【问题标题】:How to use MongoID validates_inclusion_of如何使用 MongoID validates_inclusion_of
【发布时间】:2011-07-10 15:08:28
【问题描述】:

我有一个模型,它的字段可以包含值列表。我希望该列表仅限于一个子集。我想使用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可以用于数组吗?

【问题讨论】:

  • 我建议为此编写一个自定义验证器,否则维护包含列表的排列组合可能会随着时间的推移变得难以管理。

标签: ruby-on-rails-3 validation mongoid


【解决方案1】:

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

因此请更正您在 validates_inclusion_of 中的 :in 选项:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多