คุณยังสามารถทำสิ่งต่อไปนี้:
unless params.values_at(:one, :two, :three, :four).includes?(nil)
... excute code ..
end
ฉันมักจะใช้โซลูชันข้างต้นเมื่อฉันต้องการตรวจสอบมากกว่าหนึ่งหรือสอง params
.values_at ส่งกลับและอาร์เรย์ด้วยศูนย์ในตำแหน่งของคีย์พารามิเตอร์ใด ๆ ที่ไม่ได้กำหนด เช่น:
some_hash = {x:3, y:5}
some_hash.values_at(:x, :random, :y}
จะส่งคืนสิ่งต่อไปนี้:
[3,nil,5]
.includes (ไม่มี) จากนั้นตรวจสอบอาร์เรย์เพื่อหาค่าใด ๆ มันจะกลับมาจริงคืออาร์เรย์รวมศูนย์
ในบางกรณีคุณอาจต้องการตรวจสอบว่าพารามิเตอร์ไม่มีและสตริงว่างเปล่าในค่าเท็จ
คุณสามารถจัดการค่าเหล่านั้นได้โดยเพิ่มรหัสต่อไปนี้ไว้เหนือคำสั่งเว้นแต่
params.delete_if{|key,value| value.blank?}
ทั้งหมดเข้าด้วยกันมันจะมีลักษณะเช่นนี้:
params.delete_if{|key,value| value.blank?}
unless params.values_at(:one, :two, :three, :four).includes?(nil)
... excute code ..
end
สิ่งสำคัญคือต้องทราบว่า delete_if จะแก้ไขแฮช / params ของคุณดังนั้นควรใช้ด้วยความระมัดระวัง
วิธีการแก้ปัญหาข้างต้นจะต้องใช้เวลาในการตั้งค่ามากขึ้น แต่ก็คุ้มค่าหากคุณกำลังตรวจสอบมากขึ้นจากนั้นเพียงหนึ่งหรือสองพารามิเตอร์
params
เป็นวิธีการควบคุม Rails (ที่เกิดขึ้นเพื่อส่งกลับ HashWithIndifferentAccess) มันเป็นเรื่องเกี่ยวกับ Rails