รางมีตัวตรวจสอบความถูกต้องเหมือนvalidates_numericality_of
บูลีนหรือไม่หรือต้องม้วนเอง?
รางมีตัวตรวจสอบความถูกต้องเหมือนvalidates_numericality_of
บูลีนหรือไม่หรือต้องม้วนเอง?
คำตอบ:
ตั้งแต่ Rails 3 คุณสามารถทำ:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
) สำหรับฟิลด์บูลีนได้ (ฟิลด์นี้ไม่สามารถใช้ได้กับfalse
ค่า) แต่ทั้งใน Rails 3 และ 4 validates :field, inclusion: [true, false]
จะต้องทำการทดสอบเพื่อรวมไว้ในรายการค่าโดยมีผลข้างเคียงเพื่อทดสอบการมีอยู่ของฟิลด์ (เว้นแต่จะมีค่าใดค่า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
ไฟล์.
เมื่อฉันใช้สิ่งนี้ฉันจะได้รับ:
คำเตือนจากผู้จับคู่ควร:
คุณกำลังใช้validate_inclusion_of
เพื่อยืนยันว่าคอลัมน์บูลีนอนุญาตค่าบูลีนและไม่อนุญาตค่าที่ไม่ใช่บูลีน โปรดทราบว่าไม่สามารถทดสอบสิ่งนี้ได้ทั้งหมดเนื่องจากคอลัมน์บูลีนจะแปลงค่าที่ไม่ใช่บูลีนเป็นค่าบูลีนโดยอัตโนมัติ ดังนั้นคุณควรพิจารณาลบการทดสอบนี้
คุณสามารถใช้เวอร์ชันที่สั้นกว่าได้:
validates :field, inclusion: [true, false]
ความคิดพิเศษ เมื่อจัดการกับ enums ฉันชอบใช้ค่าคงที่เช่นกัน:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
ตอบตามRails Docs 5.2.3
ตัวช่วยนี้ (การแสดงตน) ตรวจสอบว่าแอตทริบิวต์ที่ระบุไม่ว่างเปล่า มันใช้ช่องว่าง? วิธีตรวจสอบว่าค่าเป็นศูนย์หรือสตริงว่างนั่นคือสตริงที่ว่างเปล่าหรือประกอบด้วยช่องว่าง
ตั้งแต่ false.blank? เป็นจริงหากคุณต้องการตรวจสอบการมีอยู่ของฟิลด์บูลีนคุณควรใช้การตรวจสอบความถูกต้องอย่างใดอย่างหนึ่งต่อไปนี้:
validates :boolean_field_name, inclusion: { in: [true, false] }