Por que é necessário definir um novo método no controlador RESTful, segui-lo com um método create?
A pesquisa do Google não me forneceu a resposta que eu estava procurando. Entendo a diferença, mas preciso saber por que eles são usados do jeito que são.
ruby-on-rails
rest
enviado
fonte
fonte
Na documentação ActiveRecord :: Base :
create (attribute = nil) {| objeto | ...}
novo (atributos = nil) {| self if block_given? | ...}
Então
create
instancia o novo objeto, valida e salva-lo para o banco de dados. Enew
apenas cria o objeto local, mas não tenta validá-lo ou salvá-lo no banco de dados.fonte
New instancia uma nova instância de Model, mas não é salva até que o método save seja chamado.
Criar faz o mesmo que novo, mas também o salva no banco de dados.
Às vezes, você deseja fazer alguma coisa antes de salvar algo no banco de dados, às vezes, apenas deseja criar e salvá-lo imediatamente.
fonte
As partes RESTful do Rails são feitas para estar muito próximas de como o protocolo HTTP funciona. No protocolo HTTP, uma solicitação GET não deve modificar nenhum dado. Logicamente, se você observar como todas as ações RESTful no Rails funcionam, elas corresponderão às ações HTTP. Um POST é para gerar novos dados, por isso é criado logicamente. Você usa um GET para exibir a versão do formulário dessa ou em outras palavras, a nova ação. Index e show também são GETs, update é um PUT (ou PATCH no Rails 4+) e destroy é um DELETE no HTTP.
Além disso, ele separa bem a lógica no controlador e oferece uma maneira fácil de lidar com erros (renderizando novamente a nova ação com mensagens de erro).
fonte
"You use a GET to serve the form version of that or in other words, the new action"
obrigado pela resposta, mas pessoalmente acho essa convenção de nomes realmente confusa