Embora seja correto que create
chama new
e, em seguida, save
há uma grande diferença entre as duas alternativas em seus valores de retorno.
Save
retorna um true
ou false
dependendo se o objeto foi salvo com sucesso no banco de dados ou não. Isso pode ser usado para controle de fluxo, conforme o primeiro exemplo da pergunta acima.
Create
retornará o modelo independentemente de o objeto ter sido salvo ou não. Isso tem implicações para o código acima, pois a ramificação superior da if
instrução sempre será executada mesmo se o objeto falhar nas validações e não for salvo.
Se você usa create
a lógica de ramificação, corre o risco de falhas silenciosas, o que não é o caso se você usar new
+ save
.
create!
não sofre do mesmo problema que gera e exceção se o registro for inválido.
A create
alternativa pode ser útil em controladores onde respond_with
é usado para respostas de API (JSON / XML). Nesse caso, a existência de erros no objeto fará com que os erros sejam retornados na resposta com um status de unprocessable_entity
, que é exatamente o que você deseja de uma API.
Eu sempre usaria a opção new
+ save
para html, especialmente se você estiver contando com o valor de retorno para controle de fluxo.