Chociaż prawdą jest, że createwywołuje, newa następnie saveistnieje duża różnica między dwiema alternatywami w ich wartościach zwracanych.
Savepowraca znakami truelub falsew zależności od tego, czy obiekt został pomyślnie zapisany w bazie danych, czy nie. Można to następnie wykorzystać do sterowania przepływem, jak w pierwszym przykładzie w powyższym pytaniu.
Createzwróci model niezależnie od tego, czy obiekt został zapisany, czy nie. Ma to konsekwencje dla powyższego kodu, ponieważ górna gałąź ifinstrukcji będzie zawsze wykonywana, nawet jeśli obiekt nie przejdzie walidacji i nie zostanie zapisany.
Jeśli używasz createz logiką rozgałęzień, jesteś narażony na ciche awarie, co nie ma miejsca, jeśli używasz new+ save.
create! nie cierpi z powodu tego samego problemu, który powoduje, i wyjątku, jeśli rekord jest nieprawidłowy.
createAlternatywą może być użyteczne w regulatory, których respond_withużywa się do API (JSON / XML) odpowiedzi. W takim przypadku istnienie błędów w obiekcie spowoduje zwrócenie błędów w odpowiedzi o statusie unprocessable_entity, czyli dokładnie takim, jakiego oczekujesz od API.
Zawsze używałbym opcji new+ savedla html, zwłaszcza jeśli polegasz na wartości zwracanej do kontroli przepływu.