tutorial - ¿Por qué la acción "destruir" de Ruby on Rails no se llama "eliminar"?
ruby on rails 5 rest api (4)
Aquí hay una respuesta muy temprana (2007) de Ryan Bates
Básicamente, "eliminar" envía una consulta directamente a la base de datos para eliminar el registro. En ese caso, Rails no sabe qué atributos hay en el registro que se está eliminando ni si hay devoluciones de llamada (como before_destroy).
El método "destruir" toma la identificación pasada, saca el modelo de la base de datos usando el método "buscar", luego llama a destruir sobre eso. Esto significa que se activan las devoluciones de llamada.
Desearía usar "eliminar" si no desea que se activen las devoluciones de llamada o si desea un mejor rendimiento. De lo contrario (y la mayoría de las veces) querrá usar "destruir".
El principio CRUD define las cuatro operaciones básicas sobre datos persistentes:
- Crear,
- Leer,
- Actualizar,
- Borrar.
Los verbos HTTP también usan la palabra DELETE.
¿Por qué el enrutamiento predeterminado en Rails usa la palabra " destroy " para la acción correspondiente al verbo HTTP DELETE ?
Buena pregunta.
Siento que es para animarte a usar siempre destroy
y no delete
tus objetos.
En realidad, delete
no activa ninguna devolución de llamada.
Para la parte del modelo, aquí hay un buen resumen de http://www.nickpeters.net/2007/12/21/delete-vs-destroy/ :
El método de eliminación esencialmente elimina una fila (o una matriz de filas) de la base de datos. Destruir por otro lado permite algunas opciones más. En primer lugar, comprobará todas las devoluciones de llamadas como before_delete o cualquier dependencia que especifiquemos en nuestro modelo. A continuación, mantendrá el objeto que acaba de borrarse en la memoria; esto nos permite dejar un mensaje que dice que se ha eliminado "Orden # {order.id}". Por último, y lo más importante, ¡también eliminará cualquier objeto secundario asociado con ese objeto!
Sabiendo eso, solo tiene sentido llamar a la acción en el controlador la misma que la del modelo. Eliminar es demasiado simplista .
Rails usa 4 métodos estándar (verbos), a saber:
- OBTENER
- ENVIAR
- PONER
- BORRAR
Además tiene 7 acciones RESTful:
- índice
- nuevo
- crear
- editar
- actualizar
- espectáculo
- destruir
Rails nunca usa el mismo verbo como la acción correspondiente. El enrutamiento a la acción destruir hace posible hacer más de un DELETE, a través de la acción correspondiente en el controlador.
Esta guía de raíl puede ser de su interés: http://guides.rubyonrails.org/routing.html
Explicación
Los navegadores solicitan páginas de Rails haciendo una solicitud de una URL utilizando un método HTTP específico, como GET, POST, PUT y DELETE. Cada método es una solicitud para realizar una operación en el recurso. Una ruta de recursos mapea una cantidad de solicitudes relacionadas a acciones en un solo controlador.
Ahora, imagine que tenemos una solicitud HTTP GET, lo que significa que desea leer / recuperar datos. Si la acción tuviera el mismo nombre que el verbo, GET en este caso, sería demasiado simplista. GET puede dar acceso a acciones de mostrar, indexar, nuevas o editar. Todos leen datos, pero las acciones en sí mismas definitivamente no son lo mismo. Lo mismo podría decirse sobre la solicitud DELETE. Esta solicitud se procesa a través del controlador y puede tener diferentes implementaciones dentro de las acciones. Es posible que desee destruir una publicación, pero también podría significar que desea cerrar sesión en su sesión de usuario. Solo tener una acción llamada eliminar no justifica las posibilidades relacionadas con ella, a través del controlador.
Editar
Si desea saber más sobre cómo se procesan las solicitudes desde el navegador, puede leer alguna información sobre el modelo M (odel) V (iew) C (ontroller) que utiliza Rails:
http://www.youtube.com/watch?v=3mQjtk2YDkM&noredirect=1
y:
http://betterexplained.com/articles/intermediate-rails-understanding-models-views-and-controllers/
Una cita de este enlace:
El navegador realiza una solicitud, como http://mysite.com/video/show/15 El servidor web (mongrel, WEBrick, etc.) recibe la solicitud. Utiliza rutas para averiguar qué controlador usar: el patrón de ruta predeterminado es "/ controller / action / id" como se define en config / routes.rb.
Lo que significa que su solicitud inicial se traducirá y procesará a través del servidor web y la ruta correcta debe definirse a través del controlador, donde se encuentra la acción de descanso, como destruir.
En los primeros días de Rails, solo había 2 verbos, a saber, GET y POST (ya que PUT y DELETE no son compatibles, las versiones posteriores de los rails se resolvieron agregando PUT y DELETE a través de variables ocultas. El nombre de la acción de destruir nunca cambió, Ya que la solicitud y las acciones son dos cosas diferentes.
Actions || show || create || update || destroy
SQL || select|| create || update || delete
REST || get || post || post || post
Actions || show || create || update || destroy
SQL || select|| create || update || delete
REST || get || post || put || delete
Esta cita puede ser de mayor interés:
"Debido a que el enrutador usa el verbo HTTP y la URL para hacer coincidir las solicitudes entrantes, cuatro URL se asignan a siete acciones diferentes".