Respostas:
Na implementação do REST pelo Rails, new e create são tratados de maneira diferente.
Um HTTP GET to /resources/new
se destina a renderizar um formulário adequado para criar um novo recurso, o que ele chama chamando o novo ação no controlador, que cria um novo registro não salvo e renderiza o formulário.
Um HTTP POST /resources
pega o registro criado como parte da nova ação e o passa para a ação de criação no controlador, que tenta salvá-lo no banco de dados.
Na documentação ActiveRecord :: Base :
create (attribute = nil) {| objeto | ...}
Cria um objeto (ou vários objetos) e o salva no banco de dados, se as validações forem aprovadas. O objeto resultante é retornado se o objeto foi salvo com sucesso no banco de dados ou não.
novo (atributos = nil) {| self if block_given? | ...}
Novos objetos podem ser instanciados como vazios (não passar nenhum parâmetro de construção) ou predefinidos com atributos, mas ainda não salvos (passe um hash com nomes de chave que correspondem aos nomes de colunas da tabela associados). Nos dois casos, as chaves de atributo válidas são determinadas pelos nomes das colunas da tabela associada - portanto, você não pode ter atributos que não fazem parte das colunas da tabela.
Então create
instancia o novo objeto, valida e salva-lo para o banco de dados. E new
apenas cria o objeto local, mas não tenta validá-lo ou salvá-lo no banco de dados.
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.
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).
"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