Подтвердить что ты не робот

Подтвердить включение в массив параметров OR be 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?

4b9b3361

Ответ 1

правильная форма, позволяющая nil проверять, сохраняя при этом ограниченный набор значений:

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

сообщите, как опция allow_nil находится внутри опции включения хеш

Ответ 2

Я решил это, сделав строку validates следующим образом:

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

Таким образом, я допускаю nil, но я не изменяю константу, которую я использую в своем представлении для подачи коллекции опций выбора. Я с тех пор также добавил массив с элементом '', поэтому мне не нужно явно указывать пробел в моем помощнике ввода формы.