Jawaban:
Sejak Rails 3, Anda dapat melakukan:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
) untuk bidang boolean (bidang tidak akan valid untuk suatu false
nilai). Tapi di Rails 3 dan 4, setelah validates :field, inclusion: [true, false]
akan menguji penyertaan dalam daftar nilai, dengan efek samping untuk menguji keberadaan bidang (kecuali salah satu dari nilai-nilai itu nil
tentu saja).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
Saya percaya untuk bidang boolean Anda perlu melakukan sesuatu seperti:
validates_inclusion_of :field_name, :in => [true, false]
Dari versi lama API : "Ini karena cara Object # blank? Menangani nilai boolean. False.blank? # => True"
Saya tidak yakin apakah ini masih akan baik-baik saja untuk Rails 3, harap itu membantu!
true
.
Ketika saya menerapkan ini, saya mendapatkan:
Peringatan dari shoulda-matchers:
Anda menggunakan validate_inclusion_of
untuk menegaskan bahwa kolom boolean mengizinkan nilai boolean dan tidak mengizinkan nilai non-boolean. Ketahuilah bahwa tidak mungkin untuk menguji ini sepenuhnya, karena kolom boolean akan secara otomatis mengonversi nilai non-boolean menjadi nilai boolean. Karenanya, Anda harus mempertimbangkan untuk menghapus tes ini.
Anda dapat menggunakan versi yang lebih pendek:
validates :field, inclusion: [true, false]
Pemikiran ekstra. Saat berurusan dengan enum, saya juga suka menggunakan konstanta:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Jawaban menurut Rails Docs 5.2.3
Helper ini (kehadiran) memvalidasi bahwa atribut yang ditentukan tidak kosong. Ini menggunakan kosong? metode untuk memeriksa apakah nilainya nihil atau string kosong, yaitu string yang kosong atau terdiri dari spasi.
Sejak false.blank? benar, jika Anda ingin memvalidasi keberadaan bidang boolean, Anda harus menggunakan salah satu validasi berikut:
validates :boolean_field_name, inclusion: { in: [true, false] }