Meskipun benar bahwa create
panggilan new
dan kemudian save
ada perbedaan besar antara dua alternatif dalam nilai pengembaliannya.
Save
mengembalikan salah satu true
atau false
tergantung pada apakah objek berhasil disimpan ke database atau tidak. Ini kemudian dapat digunakan untuk kontrol aliran sesuai contoh pertama dalam pertanyaan di atas.
Create
akan mengembalikan model terlepas dari apakah objek itu disimpan atau tidak. Ini memiliki implikasi untuk kode di atas bahwa cabang atas if
pernyataan akan selalu dieksekusi bahkan jika objek gagal validasi dan tidak disimpan.
Jika Anda menggunakan create
dengan logika percabangan Anda berisiko gagal diam yang tidak terjadi jika Anda menggunakan new
+ save
.
create!
tidak mengalami masalah yang sama seperti yang timbul dan pengecualian jika catatan tidak valid.
The create
alternatif dapat berguna dalam controller di mana respond_with
digunakan untuk API (JSON / XML) tanggapan. Dalam hal ini keberadaan kesalahan pada objek akan menyebabkan kesalahan dikembalikan dalam respons dengan status unprocessable_entity
, yang persis seperti yang Anda inginkan dari API.
Saya akan selalu menggunakan opsi new
+ save
untuk html, terutama jika Anda mengandalkan nilai balik untuk kontrol aliran.