ฉันมีโมเดล ActiveRecord ซึ่งส่งคืนtrue
จากvalid?
(และ. error ว่างเปล่า) แต่กำลังกลับมาfalse
จากsave()
ไฟล์. หากอินสแตนซ์โมเดลถูกต้องฉันจะทราบได้อย่างไรว่าอะไรทำให้การบันทึกล้มเหลว
ฉันมีโมเดล ActiveRecord ซึ่งส่งคืนtrue
จากvalid?
(และ. error ว่างเปล่า) แต่กำลังกลับมาfalse
จากsave()
ไฟล์. หากอินสแตนซ์โมเดลถูกต้องฉันจะทราบได้อย่างไรว่าอะไรทำให้การบันทึกล้มเหลว
คำตอบ:
ตรวจสอบการโทรกลับทั้งหมดของคุณ
ฉันมีปัญหาเช่นนี้ที่ฉันมีและเมธอด "after_validate" ที่ล้มเหลวหลังจากที่ฉันได้ทำการเปลี่ยนแปลงหลายอย่างกับโมเดล แบบจำลองถูกต้อง แต่ "after_validate" ส่งคืนเป็นเท็จดังนั้นหากฉันใช้model.valid
มันบอกว่าจริง แต่ถ้าฉันบันทึกไว้ก็ทำให้ฉันมีข้อผิดพลาดในการตรวจสอบความถูกต้อง (ส่งผ่านจากการเรียกกลับ after_validate) มันแปลกมาก
ดูที่การติดตามแอปพลิเคชันและคุณควรจะเห็นว่าบรรทัดของรหัสใดที่เพิ่มข้อยกเว้น
"Hey! That's MY fake leg!" # Believe it or not, this is important
ด้านสว่างตอนนี้ผมมีตัวเลือกในการแก้ไขรหัสนี้โดยการเพิ่มบรรทัด ไม่ใช่ว่าฉันจะทำอย่างนั้น ;)
true.tap { do_something }
ลองใช้เวอร์ชันปังsave!
(มีเครื่องหมายอัศเจรีย์ต่อท้าย) และตรวจสอบข้อผิดพลาดที่เกิดขึ้น
save!
สามารถเพิ่มActiveRecord::RecordInvalid
(เนื่องจากมีการตรวจสอบความถูกต้อง) หรือActiveRecord::RecordNotSaved
นั่นคือสิ่งที่คุณต้องการช่วยเหลือ
.save
ความล้มเหลวที่ไม่ได้เกิดจากการตรวจสอบความถูกต้อง คุณสมบัติ "ไม่น่าพอใจน้อยที่สุด" หมายถึง Rails ไม่ใช่คำตอบนี้
หาก@user.save
(เช่น) ส่งคืนให้false
เรียกใช้สิ่งนี้เพื่อรับข้อผิดพลาดทั้งหมด:
@user.errors.full_messages
ใช่ฉันแก้ไขปัญหานี้โดยตรวจสอบให้แน่ใจว่าฉันคืนค่าจริงในการโทรกลับ before_ * ทั้งหมดของฉันแล้วมันจะเริ่มทำงาน :)
ปัญหาที่ฉันพบคือฉันลืมเพิ่มการตรวจสอบความถูกต้องให้กับโมเดล
class ContactGroup < ActiveRecord::Base
validates_presence_of :name
end