Ответы:
Начиная с Rails 3, вы можете:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
) для логического поля (поле не будет действительным для false
значения). Но как в Rails 3, так и в 4, наличие validates :field, inclusion: [true, false]
будет проверять на включение в список значений с побочным эффектом для проверки наличия поля (если, nil
конечно, одно из этих значений не присутствует ).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
Я считаю, что для логического поля вам нужно будет сделать что-то вроде:
validates_inclusion_of :field_name, :in => [true, false]
Из более старой версии API : «Это связано с тем, как Object # blank? Обрабатывает логические значения. False.blank? # => True»
Я не уверен, что это все еще подойдет для Rails 3, надеюсь, это помогло!
true
.
Когда я применяю это, я получаю:
Предупреждение от shoulda-matchers:
Вы используете, validate_inclusion_of
чтобы утверждать, что логический столбец допускает логические значения и запрещает небулевские значения. Имейте в виду, что полностью протестировать это невозможно, так как логические столбцы автоматически преобразуют небулевы значения в логические. Следовательно, вам следует рассмотреть возможность удаления этого теста.
Вы можете использовать более короткую версию:
validates :field, inclusion: [true, false]
Дополнительная мысль. При работе с перечислениями я тоже люблю использовать константу:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Ответ согласно Rails Docs 5.2.3
Этот помощник (присутствие) проверяет, что указанные атрибуты не пусты. Использует заготовку? , чтобы проверить, является ли значение нулевым или пустой строкой, то есть строкой, которая либо пуста, либо состоит из пробелов.
Поскольку false.blank? верно, если вы хотите проверить наличие логического поля, вы должны использовать одну из следующих проверок:
validates :boolean_field_name, inclusion: { in: [true, false] }