包含在选项数组中的验证或为零

时间:2012-11-20 02:21:44

标签: validation activerecord ruby-on-rails-3.2

我有一个模型,我希望将字段的输入限制为nil或落在指定的值数组中。我可以让包含部分工作,但allow_nil: true位似乎不适合我:

class Mock::Patient < ActiveRecord::Base
  LANGUAGE_OPTIONS = %w[English Spanish French German Chinese Hindi Punjabi]
  validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS }
end

我已尝试将最后一行修改为:

  validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS }, allow_nil: true

但无济于事。表达简单包含或nil组合的最简单方法是什么?

2 个答案:

答案 0 :(得分:11)

允许nil验证的正确形式,同时仍允许有限的数组值如下:

validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS, allow_nil: true }

注意allow_nil选项是里面包含选项哈希

答案 1 :(得分:0)

我通过使验证行看起来像这样来解决这个问题:

validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS + [nil] }

这样,我允许nil,但是我不改变我在视图中使用的常量来提供选择选项的集合。我之前也在数组中添加了一个元素''所以我不必在表单输入帮助器中明确包含空白。