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


我有一个模型,我想将字段的输入限制为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组合的最简单方法是什么?


5782
2017-11-20 02:21


起源



答案:


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

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

注意allow_nil选项是怎样的  包含选项哈希


11
2018-02-15 17:03





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

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

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


0
2017-11-27 18:16