¿Por qué hay una necesidad de definir un nuevo método en el controlador RESTful, seguir con un método de creación?
La búsqueda de Google no me proporcionó la respuesta que estaba buscando. Entiendo la diferencia, pero necesito saber por qué se usan como están.
fuente
De la documentación de ActiveRecord :: Base :
crear (atributos = nulo) {| objeto | ...}
nuevo (atributos = nulo) {| self si block_given? | ...}
Por lo tanto,
create
crea una instancia del nuevo objeto, lo valida y luego lo guarda en la base de datos. Ynew
solo crea el objeto local pero no intenta validarlo ni guardarlo en la base de datos.fuente
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.
fuente
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).
fuente
"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