Risposte:
Nell'ambito dell'implementazione di REST di REST, le novità e le creazioni vengono trattate in modo diverso.
Un HTTP GET to ha lo /resources/new
scopo di rendere un modulo adatto alla creazione di una nuova risorsa, cosa che fa chiamando la nuova azione all'interno del controller, che crea un nuovo record non salvato e rende il modulo.
Un HTTP POST /resources
prende il record creato come parte della nuova azione e lo passa all'azione di creazione all'interno del controller, che quindi tenta di salvarlo nel database.
Dalla documentazione di ActiveRecord :: Base :
create (attributi = zero) {| oggetto | ...}
Crea un oggetto (o più oggetti) e lo salva nel database, se le convalide passano. L'oggetto risultante viene restituito indipendentemente dal fatto che l'oggetto sia stato salvato correttamente nel database o meno.
nuovo (attributi = zero) {| self if block_given? | ...}
I nuovi oggetti possono essere istanziati come vuoti (passa nessun parametro di costruzione) o preimpostati con attributi ma non ancora salvati (passa un hash con nomi di chiave corrispondenti ai nomi di colonna della tabella associata). In entrambi i casi, le chiavi di attributo valide sono determinate dai nomi delle colonne della tabella associata, pertanto non è possibile avere attributi che non fanno parte delle colonne della tabella.
Quindi create
crea un'istanza del nuovo oggetto, lo convalida e quindi lo salva nel database. E new
crea solo l'oggetto locale ma non tenta di convalidarlo o salvarlo nel DB.
Nuovo crea un'istanza di una nuova istanza del modello, ma non viene salvata finché non viene chiamato il metodo di salvataggio.
Crea fa lo stesso di nuovo, ma lo salva anche nel database.
A volte vuoi fare cose prima di salvare qualcosa nel database, a volte vuoi solo crearlo e salvarlo immediatamente.
Le parti RESTful di Rails sono fatte per essere molto vicine a come funziona il protocollo HTTP. Nel protocollo HTTP, una richiesta GET non dovrebbe modificare alcun dato. Logicamente, se osservi il modo in cui funzionano tutte le azioni RESTful in Rails, si abbineranno alle azioni HTTP. Un POST serve per generare nuovi dati, quindi è logicamente creato. Si utilizza un GET per pubblicare la versione del modulo o, in altre parole, la nuova azione. Index e show sono anche GET, update è un PUT (o PATCH in Rails 4+) e distruggere è un DELETE in HTTP.
Inoltre, separa bene la logica nel controller e offre un modo semplice per gestire gli errori (eseguendo nuovamente il rendering della nuova azione con messaggi di errore).
"You use a GET to serve the form version of that or in other words, the new action"
grazie per la risposta, ma personalmente trovo questa convenzione di denominazione davvero confusa