Это отличная дискуссия с некоторыми важными моментами: Rails автоматически проверяет логические поля, ложное значение приведет к сбою проверки «присутствия», и необходима специальная проверка, явно просматривающая истинные ложные настройки, если вы хотите убедиться, что логическое поле не ноль, но имеет истинное значение true или false.
Быстрое обновление для Rails 3.x: помощник включения:
http://guides.rubyonrails.org/active_record_validations_callbacks.html#inclusion
С помощью этого помощника проверка того, что логическое поле имеет значение true или false, выглядит следующим образом:
validates :superuser, :inclusion => {:in => [true, false], :message => 'requires a true or false value' }
Сообщение является необязательным и, как отмечается в документации, по умолчанию значение "не включено в список".
Похоже, что онлайн-консенсус заключается не в том, чтобы явно утвердить истину или ложь, а в том, чтобы позволить рельсам позаботиться об этом. Однако я столкнулся с ситуацией, когда явные проверки выявили проблему в базе данных (для полей MySql tinyint было установлено значение 2 или 4 вместо 1), что вызвало странное поведение. Поля могут быть установлены в true или false, но значение не может быть прочитано как логическое значение. Другими словами, валидация Rails прошла через это, но явная валидация включения пометила все те случаи, когда база данных была неправильно сконфигурирована. Так что это может быть одной из веских причин для проверки этих записей.
Надеюсь это поможет. Charles