แม้ว่ามันจะถูกต้องที่create
เรียกnew
แล้วsave
มีความแตกต่างใหญ่ระหว่างสองทางเลือกในค่าตอบแทนของพวกเขา
Save
ส่งคืนอย่างใดอย่างหนึ่งtrue
หรือfalse
ขึ้นอยู่กับว่าวัตถุถูกบันทึกไปยังฐานข้อมูลเรียบร้อยแล้วหรือไม่ ซึ่งสามารถใช้สำหรับการควบคุมการไหลตามตัวอย่างแรกในคำถามข้างต้น
Create
จะส่งคืนโมเดลโดยไม่คำนึงว่าวัตถุนั้นได้รับการบันทึกหรือไม่ สิ่งนี้มีความเกี่ยวข้องกับรหัสข้างต้นซึ่งสาขาด้านบนของif
คำสั่งจะถูกดำเนินการเสมอแม้ว่าวัตถุจะล้มเหลวในการตรวจสอบและจะไม่ถูกบันทึก
ถ้าคุณใช้create
กับการแยกทางตรรกะคุณมีความเสี่ยงของความล้มเหลวเงียบซึ่งเป็นกรณีที่ไม่ถ้าคุณใช้+new
save
create!
ไม่ต้องทนทุกข์ทรมานจากปัญหาเดียวกันในขณะที่มันเพิ่มและยกเว้นหากบันทึกไม่ถูกต้อง
create
ทางเลือกที่สามารถเป็นประโยชน์ในการควบคุมที่respond_with
จะใช้สำหรับ API (JSON / XML) การตอบสนอง ในกรณีนี้การมีอยู่ของข้อผิดพลาดบนวัตถุจะทำให้ข้อผิดพลาดถูกส่งกลับในการตอบสนองด้วยสถานะunprocessable_entity
ซึ่งเป็นสิ่งที่คุณต้องการจาก API
ฉันมักจะใช้ตัวเลือกnew
+ save
สำหรับ html โดยเฉพาะถ้าคุณพึ่งพาค่าตอบแทนสำหรับการควบคุมการไหล