• Skip to main content
  • Skip to header right navigation
  • Skip to site footer

Antonio Pérez

Full Stack developer

  • Home
  • Sobre mi
  • Podcast
  • Blog
  • Contacto
desarrollo full stack

Como crear un CRUD básico con Ruby on Rails

You are here: Home / Ruby on Rails / Como crear un CRUD básico con Ruby on Rails
12/12/2017 by apcano1978

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!

Categoría: Desarrollo Back End, Desarrollo web, Ruby on Rails

About apcano1978

Intento nadar entre frameworks, IDEs, SDKs… Algunos lo llaman Full stack developer, yo creo que es solo un eufemismo para decir «el que está en medio de todos los follones» Ruby on Rails y Angular … y bastante tengo …

Previous Post:Como instalar Bootstrap 4 en tu nuevo proyecto de angular 5 (o 4)
Next Post:Como acceder a la consola de rails en Elastic Beanstalk de AWS (en producción)

Reader Interactions

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ahora también en youtube

Ve al canal

Copyright © 2023 · Antonio Pérez · All Rights Reserved · Powered by Mai Theme