Respuestas:
Dentro de la implementación de REST de REST, new y create se tratan de manera diferente.
Un HTTP GET to /resources/new
está destinado a representar un formulario adecuado para crear un nuevo recurso, lo que hace llamando al nuevo acción dentro del controlador, que crea un nuevo registro no guardado y representa el formulario.
Un HTTP POST /resources
toma el registro creado como parte de la nueva acción y lo pasa a la acción de creación dentro del controlador, que luego intenta guardarlo en la base de datos.
De la documentación de ActiveRecord :: Base :
crear (atributos = nulo) {| objeto | ...}
Crea un objeto (o varios objetos) y lo guarda en la base de datos, si pasan las validaciones. El objeto resultante se devuelve si el objeto se guardó correctamente en la base de datos o no.
nuevo (atributos = nulo) {| self si block_given? | ...}
Los nuevos objetos pueden instanciarse como vacíos (no pasar parámetros de construcción) o preestablecidos con atributos pero aún no guardados (pasar un hash con nombres de clave que coincidan con los nombres de columna de la tabla asociada). En ambos casos, las claves de atributo válidas están determinadas por los nombres de columna de la tabla asociada; por lo tanto, no puede tener atributos que no formen parte de las columnas de la tabla.
Por lo tanto, create
crea una instancia del nuevo objeto, lo valida y luego lo guarda en la base de datos. Y new
solo crea el objeto local pero no intenta validarlo ni guardarlo en la base de datos.
New crea una instancia nueva de Model, pero no se guarda hasta que se llama al método save.
Crear hace lo mismo que nuevo, pero también lo guarda en la base de datos.
A veces quieres hacer cosas antes de guardar algo en la base de datos, a veces solo quieres crear y guardarlo de inmediato.
Las partes RESTful de Rails están hechas para estar muy cerca de cómo funciona el protocolo HTTP. En el protocolo HTTP, una solicitud GET no debe modificar ningún dato. Lógicamente, si observa la forma en que funcionan todas las acciones RESTful en Rails, coincidirán con las acciones HTTP. Un POST es para generar nuevos datos, por lo que se crea lógicamente. Utiliza un GET para servir la versión del formulario o, en otras palabras, la nueva acción. Index y show también son GET, la actualización es un PUT (o PATCH en Rails 4+), y destroy es un DELETE en HTTP.
Además, separa muy bien la lógica en el controlador y le brinda una manera fluida de lidiar con los errores (al volver a representar la nueva acción con mensajes de error).
"You use a GET to serve the form version of that or in other words, the new action"
gracias por la respuesta, pero personalmente encuentro esta convención de nombres realmente confusa