web-dev-qa-db-ja.com

Rails:何かがブール値であることを検証するにはどうすればよいですか?

Railsにはvalidates_numericality_ofブール値の場合、または独自にロールする必要がありますか?

109
aarona

Rails 3なので、次のことができます。

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

ブール値フィールドの場合、次のようなことを行う必要があると考えています。

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

古いバージョンの [〜#〜] api [〜#〜] :「これは、Object#blank?がブール値を処理する方法によるものです。false.blank?#=> true」

Rails 3でもこれで問題ないかどうかはわかりませんが、助けてくれればと思います!

38
Budgie

これを適用すると、次のようになります。

Shoulda-matchersからの警告:

validate_inclusion_ofを使用して、ブール列がブール値を許可し、非ブール値を許可しないことをアサートしています。ブール列はブール値以外の値をブール値に自動的に変換するため、これを完全にテストすることはできないことに注意してください。したがって、このテストの削除を検討する必要があります。

9
user708617

短いバージョンを使用できます:

validates :field, inclusion: [true, false]

余分な考え。列挙型を扱うときは、定数も使用したいです:

KINDS = %w(opening appointment).freeze

enum kind: KINDS

validates :kind, inclusion: KINDS
4
Flavio Wuensche

Rails Docs 5.2. に従って回答する

このヘルパー(存在)は、指定された属性が空でないことを検証します。空白を使用しますか?値がnilまたは空白文字列、つまり、空であるか空白で構成される文字列であるかどうかを確認するメソッド。

False.blankからですか?ブールフィールドの存在を検証する場合は、次の検証のいずれかを使用する必要があります。

validates :boolean_field_name, inclusion: { in: [true, false] }
1
Cody Elhard