Rails: กำลังตรวจสอบความยาวขั้นต่ำและสูงสุดของสตริง แต่ปล่อยให้ว่าง


88

ฉันมีช่องที่ต้องการตรวจสอบความถูกต้อง ฉันต้องการให้ฟิลด์สามารถเว้นว่างได้ แต่ถ้าผู้ใช้กำลังป้อนข้อมูลฉันต้องการให้อยู่ในรูปแบบที่แน่นอน ขณะนี้ฉันกำลังใช้การตรวจสอบความถูกต้องด้านล่างในโมเดล แต่ไม่อนุญาตให้ผู้ใช้เว้นว่างไว้:

validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5

ฉันจะเขียนสิ่งนี้เพื่อบรรลุเป้าหมายได้อย่างไร

คำตอบ:


135

ฉันคิดว่ามันอาจต้องการอะไรเช่น:

validates_length_of :foo, minimum: 5, maximum: 5, allow_blank: true

ตัวอย่างเพิ่มเติม: ActiveRecord :: Validations :: ClassMethods


7
สำหรับขนาดที่เฉพาะเจาะจงคุณสามารถใช้ข้อ จำกัด ด้านความยาว: คือ
GuiGreg

133

คุณยังสามารถใช้รูปแบบนี้:

validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true

หรือเนื่องจากขั้นต่ำและสูงสุดของคุณเท่ากันสิ่งต่อไปนี้ก็จะใช้ได้เช่นกัน:

validates :foo, length: {is: 5}, allow_blank: true

12

หรือกระชับมากขึ้น (ด้วยไวยากรณ์แฮชใหม่) จากเอกสารการตรวจสอบความถูกต้อง :

validates :foo, length: 5..5, allow_blank: true

ขีด จำกัด บนน่าจะแสดงถึงความหมายที่มากกว่าเช่น "in: 5..20" แต่เพียงแค่ตอบคำถามตามตัวอักษร


ไม่คิดว่าinจะใช้ได้กับสตริงดูเหมือนว่าจะเป็นตัวเลขเท่านั้น
ecoologic

1
สิ่งนี้ควรจะใช้งานได้แทนvalidates :foo, length: 2..5, allow_blank: trueแต่จะมี `ความยาว: {is: 5}` ในกรณีของ OP
PhilT


3

validates_ * ทุกตัวยอมรับ: ถ้าหรือ: เว้นแต่ตัวเลือก

validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition

โดย validate_foo_condition คือเมธอดที่ส่งคืนจริงหรือเท็จ

คุณยังสามารถส่งผ่านวัตถุ Proc:

validates_length_of :foo, :maximum => 5, :unless => Proc.new {|object| object.foo.blank?}




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.