2010-08-31 7 views

ответ

204

С Rails 3, вы можете сделать:

validates :field, inclusion: { in: [ true, false ] } 
+1

+1 Да. Мне нравится, что они предоставляют способ сделать это так. – DJTripleThreat

+2

Итак, это получает правильность проверки, но сообщение об ошибке не полезно для конечного пользователя: «myfield не входит в список» –

+2

Хорошая точка. Вы можете настроить сообщение об ошибке: http://guides.rubyonrails.org/active_record_validations_callbacks.html#message –

37

Я считаю, что для булева поля вам нужно будет сделать что-то вроде:

validates_inclusion_of :field_name, :in => [true, false] 

От старой версии API: «Это связанно с образом объект # заготовки обрабатывает булевы значения ложь?.. пробел? # => true "

Я не уверен, что это все равно будет хорошо для Rails 3, но надеюсь, что это помогло!

+0

lol @ Rails 3. Могу поспорить, что это будет оговоркой на долгие месяцы. Хорошо, я думал, что это мигт, и вы согласны. Благодаря! – DJTripleThreat

+0

Это правда для Rails 4! Ничего себе, false.blank? # => true просто похоже на * неправильный ответ, чего я не ожидал бы от Rails. –

8

Когда я применяю это, я получаю:

Предупреждение от Shoulda-matchers:

Вы используете validate_inclusion_of утверждать, что логическое столбец допускает булевские значения и запрещает небулевые. Имейте в виду, что это невозможно полностью протестировать, так как булевские столбцы будут автоматически конвертировать небулевые значения в булевы. Следовательно, вы должны принять решение об устранении этого теста.

+0

Для полей, где разрешен null, он все еще преобразует nil в boolean? – mwfearnley

Смежные вопросы