Mặc dù đúng là createcác cuộc gọi newvà sau đó savecó 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.
Savetrả về một trong hai truehoặc falsetù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.
Createsẽ 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 ifcâ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 createvớ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ự createthay 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+ savecho html, đặc biệt nếu bạn đang dựa vào giá trị trả về cho điều khiển luồng.