Проверить поле модели: если значение равно ключу в хэше - PullRequest
7 голосов
/ 20 сентября 2011

В инициализаторе у меня есть огромный COUNTRY_CODES хэш, с форматом:

{ :us => "United States, :de => "Germany" }

В моей модели я хочу проверить, что введенное значение:

  • 1009 * настоящее *
  • ключ хеш-кода моей страны

Как мне это одобрить?

Я не могу использовать:

validates :country, :presence => true,
                    :inclusion => { :in => COUNTRY_CODES }

Я пробовал настраиваемые валидаторы, но я получаю ошибки метода, когда значение равно nil, например когда я пытаюсь использовать value.to_sym, в результате чего я проверяю валидатор, и он становится грязным.

Попытка выяснить самый СУХОЙ и эффективный способ сделать это.

Ответы [ 3 ]

14 голосов
/ 20 сентября 2011

Вам необходимо собрать ключи (символы) COUNTRY_CODES в виде строк и подтвердить их включение. Так что используйте:

validates :country, :presence => true,:inclusion => { :in => COUNTRY_CODES.keys.map(&:to_s) }
4 голосов
/ 20 сентября 2011

Попробуйте COUNTRY_CODES.keys, если хотите проверить только ключами в хэше.

1 голос
/ 20 сентября 2011

Как это?

validates :country, :presence => true,
                    :inclusion => { :in => COUNTRY_CODES.keys.map{|c| c.to_s}
...