Mặc dù đúng là create
các cuộc gọi new
và sau đó save
có một sự khác biệt lớn giữa hai lựa chọn thay thế trong các giá trị trả về của chúng.
Save
trả về một trong hai true
hoặc false
tùy thuộc vào việc đối tượng đã được lưu thành công vào cơ sở dữ liệu hay chưa. Điều này sau đó có thể được sử dụng để kiểm soát dòng chảy theo ví dụ đầu tiên trong câu hỏi trên.
Create
sẽ trả về mô hình bất kể đối tượng đã được lưu hay chưa. Điều này có ý nghĩa đối với mã ở trên trong đó nhánh trên cùng của if
câu lệnh sẽ luôn được thực thi ngay cả khi đối tượng không xác nhận hợp lệ và không được lưu.
Nếu bạn sử dụng create
với logic phân nhánh, bạn có nguy cơ thất bại thầm lặng, đó không phải là trường hợp nếu bạn sử dụng new
+ save
.
create!
không gặp phải vấn đề tương tự khi nó phát sinh và ngoại lệ nếu hồ sơ không hợp lệ.
Sự create
thay thế có thể hữu ích trong các bộ điều khiển respond_with
được sử dụng cho các phản hồi API (JSON / XML). Trong trường hợp này, sự tồn tại của các lỗi trên đối tượng sẽ khiến các lỗi được trả về trong phản hồi với trạng thái unprocessable_entity
, đó chính xác là những gì bạn muốn từ API.
Tôi sẽ luôn sử dụng tùy chọn new
+ save
cho html, đặc biệt nếu bạn đang dựa vào giá trị trả về cho điều khiển luồng.