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

idS*_*tar 11 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
Run Code Online (Sandbox Code Playgroud)

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

  validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS }, allow_nil: true
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*caM 11

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

validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS, allow_nil: true }
Run Code Online (Sandbox Code Playgroud)

注意allow_nil选项是如何列入选项哈希