Rails: как мне проверить, что что-то является логическим? - PullRequest
108 голосов
/ 31 августа 2010

Есть ли у рельсов валидатор типа validates_numericality_of для логического значения или мне нужно свернуть свой собственный?

Ответы [ 5 ]

229 голосов
/ 18 января 2011

Начиная с Rails 3, вы можете сделать:

validates :field, inclusion: { in: [ true, false ] }
38 голосов
/ 31 августа 2010

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

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

Из более старой версии API : «Это связано с тем, что Object # blank? Обрабатывает логические значения. False.blank? # => True»

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

9 голосов
/ 19 мая 2015

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

Предупреждение от горожан:

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

4 голосов
/ 20 января 2019

Вы можете использовать более короткую версию:

validates :field, inclusion: [true, false]

Дополнительные мысли.При работе с перечислениями мне также нравится использовать константу:

KINDS = %w(opening appointment).freeze

enum kind: KINDS

validates :kind, inclusion: KINDS
1 голос
/ 30 мая 2019

Ответ согласно Rails Docs 5.2.3

Этот помощник (присутствие) проверяет, что указанные атрибуты не пусты. Это использует бланк? метод проверки, является ли значение ноль или пустой строкой, то есть строкой, которая является либо пустой, либо состоит из пробелов.

Так как false.blank? Значение true, если вы хотите проверить наличие логического поля, вы должны использовать одну из следующих проверок:

validates :boolean_field_name, inclusion: { in: [true, false] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...