En este artículo vamos a crear un servicio CRUD básico en Ruby on Rails para operar suponiendo que estemos creando un backend con Ruby on Rails, así que no vamos a crear las vistas, sino que en lugar de ello vamos a suponer que trabajamos con json en todo momento.
No nos enrollemos, vamos al lío. Suponemos que tenemos nuestro proyecto creado con rails con rails new myproject –api lo cual nos ha creado nuestro proyecto ajustado para funcionar como API y ahora, imaginemos que myproject es una tienda online y vamos a comenzar creando las categorías, para lo cual ya hemos ejecutado el comando rails g model Category y ajustado el modelo. Seguramente escriba pronto otro artículo explicando como crear un modelo y sus asociaciones básicas, pero supongo que si estás leyendo esto ya lo has hecho así que directamente vamos a crear el controlador que nos va a gestionar las operaciones relativas a las categorías, para ello, para generar nuestro CRUD básico para nuestro backend en rails ejecutamos rails g controller categories
Una vez hemos ejecutado el generador del controlador, nos aparece, dentro de la carpeta controllers de nuestro proyecto el archivo categories_controller.rb y aquí es donde vamos a crear los métodos que van a definir las operaciones sobre el modelo categories.
En este momento el archivo categories_controller.rb estará justo así:
# controllers/categories_controller.rb class CategoriesController < ApplicationController end
A partir de ahí, tenemos que incluir los distintos métodos que componen el CRUD básico para nuestro sistema de categorías, en este caso vamos a implementar los siguientes métodos: index, create, update, show y destroy aquí te dejo el código completo con el CRUD una vez implementado:
# controllers/categories_controller.rb class CategoriesController < ApplicationController before_action :set_category, only: [:show, :update, :destroy] def index @categories = Category.all render json: @categories end def create @category = Category.new(category_params) if @category.save render json: { success: true, category_id: @category.id } else render json: { success: false } end end def update if @category.update(category_params) render json: { success: true } else render json: { success: false } end end def show render json: @category end def destroy if @category.destroy render json: { success: true } else render json: { success: false } end end private def set_category @category = Category.find(params[:id]) end def category_params params.require(:category).permit(:name) end end
El último paso para hacer que nuestros controladores estén disponibles es modificar el archivo routes.rb para crear las rutas mediante las que podremos acceder a estos métodos, en este caso es muy sencillo, tan solo añadimos esta línea a routes.rb:
# routes.rb Rails.application.routes.draw do resources :categories, except: [:new, :edit] # <- Esta es la línea que añadimos end
Así de fácil, en este caso excluimos del resources la ruta correspondiente a new y a edit, ya que no estamos generando vistas, estamos trabajando en modo API.
Explicación del código para crear este CRUD básico
En primer lugar fijaos en que he incluido una orden before_action :set_category, only: [:show, :update, :delete] esta acción se ejecutará cuando se llame al método pero antes de que este se ejecute, en este caso, lo utilizo para encontrar el registro en activerecord que quiero mostrar, actualizar o eliminar. Obviamente no lo aplico al índex ni al create ya que no trabajo sobre un registro concreto.
Vamos a definirlo por cada método:
Index: listado de categorías
En el index voy a responder a una llamada de tipo GET sobre la URL http://myproject.com/categories para devolver el listado completo de categorías en formato JSON
Create: Nueva categoría
Con el método create, creamos una nueva categoría, fijaos aquí en esta función privada que hemos añadido a la clase, def category_params bien, esto en Rails se usa para crear un whitelist con los parámetros que podremos introducir en la base de datos, si no especificamos aquí el parámetro, no se incorporará, en este caso tan solo hemos permitido que se añada a la categoría el parámetro name, es decir, el nombre de la categoría.
Es importante tener en cuenta una cosa cuando estamos trabajando con Rails como backend. Este create responderá a un POST sobre la URL: http://myproject.com/categories y el formato del cuerpo del json lo hemos definido justo aquí en esta función category_params el formato deberá ser:
{ category: { name: «nombre de la categoría» } }
Si el JSON que enviamos al API no tiene este formato no va a ser aceptado y, por lo tanto, no se creará la categoría, en este caso, directamente sobre el controlador hemos generado la respuesta en caso positivo o negativo con un { success: true } o { success: false } de esta forma nos será muy sencillo controlar si el resultado de nuestra solicitud al API ha llegado a buen término.
Update: Modificar categoría
El update funciona casi como el create, solo hay que tener en cuenta que es una llamada de tipo PATCH sobre la URL http://myproject.com/categories/:id para poder operar sobre una categoría pero el formato del json de llamada es igual, y hemos definido también la respuesta de la misma manera, así simplificamos el trabajo en el front-end
Show: Ver una categoría
El metodo show, también funciona mediante un GET, pero en este caso la URL sobre la que debemos atacar es http://myproject.com/categories/:id de esta manera el JSON que obtenemos de vuelta tan solo nos devolverá el registro que hemos especificado.
Destroy: Eliminar categoría
Ya queda poco, no desesperes, ya estamos en el destroy, este es igualmente sencillo, tan solo tienes que enviar una solicitud DELETE sobre la url http://myproject.com/categories/:id y de esta manera eliminarás la categoría que tu quieras.
Pues bien, esto es todo, no es tan fiero el lobo como lo pintan ¿verdad? Deja tus comentarios, seguro que tenéis ideas brillantes que no conozco, deja también tus dudas, las contestaré en cuanto puedas siempre que este dentro de mis posibilidades. Encantado de ayudar en lo que pueda!
Deja una respuesta