Câu trả lời:
Kể từ Rails 3, bạn có thể làm:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
) cho trường boolean (trường sẽ không hợp lệ cho một false
giá trị). Nhưng trong cả Rails 3 và 4, việc validates :field, inclusion: [true, false]
kiểm tra để đưa vào danh sách các giá trị, với tác dụng phụ để kiểm tra sự hiện diện của trường (tất nhiên là trừ khi một trong những giá trị đó nil
).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
Tôi tin rằng đối với trường boolean, bạn sẽ cần thực hiện một số việc như:
validates_inclusion_of :field_name, :in => [true, false]
Từ phiên bản cũ hơn của API : "Điều này là do cách Object # blank? Xử lý các giá trị boolean. False.blank? # => True"
Tuy nhiên, tôi không chắc liệu điều này có còn ổn với Rails 3 hay không, hy vọng điều đó sẽ giúp ích!
true
.
Khi tôi áp dụng điều này, tôi nhận được:
Cảnh báo từ những người phối hợp nêna:
Bạn đang sử dụng validate_inclusion_of
để khẳng định rằng một cột boolean cho phép các giá trị boolean và không cho phép các cột không boolean. Lưu ý rằng không thể kiểm tra hoàn toàn điều này, vì các cột boolean sẽ tự động chuyển đổi các giá trị không phải boolean thành giá trị boolean. Do đó, bạn nên xem xét loại bỏ thử nghiệm này.
Bạn có thể sử dụng phiên bản ngắn hơn:
validates :field, inclusion: [true, false]
Suy nghĩ thêm. Khi xử lý enums, tôi cũng thích sử dụng một hằng số:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Trả lời theo Rails Docs 5.2.3
Trình trợ giúp (sự hiện diện) này xác nhận rằng các thuộc tính được chỉ định không trống. Nó sử dụng chỗ trống? phương pháp để kiểm tra xem giá trị là nil hay chuỗi trống, nghĩa là một chuỗi trống hoặc bao gồm khoảng trắng.
Kể từ khi false.blank? là đúng, nếu bạn muốn xác thực sự hiện diện của trường boolean, bạn nên sử dụng một trong các cách xác nhận sau:
validates :boolean_field_name, inclusion: { in: [true, false] }