回答:
Rails 3以降、次のことができます:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
ブール値フィールドの存在()に対する通常の検証はできないことに注意してください(フィールドはfalse
値に対して有効ではありません)。しかし、Rails 3とRails 4の両方でvalidates :field, inclusion: [true, false]
、値のリストに含まれているかどうかをテストし、フィールドの存在をテストする副作用があります(これらの値の1つ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による回答
このヘルパー(プレゼンス)は、指定された属性が空でないことを検証します。ブランクを使いますか?値がnilまたは空の文字列、つまり空であるか空白で構成される文字列であるかどうかを確認するメソッド。
false.blankから?trueの場合、ブールフィールドの存在を検証する場合は、次の検証のいずれかを使用する必要があります。
validates :boolean_field_name, inclusion: { in: [true, false] }