arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Qué es el Scaffold en Rails

Claudia Gonzalez Fuentes

av_timer 3 Min. de lectura

remove_red_eye 2638 visitas

calendar_today 01 Junio 2023

Ruby on Rails es un framework que busca crear aplicaciones de forma rápida y simple, mejorando la experiencia de los desarrolladores. Esto se debe a su enfoque en convención vs configuración, asumiendo cuál es la mejor manera de hacer ciertas cosas, lo que se conoce como el Rails way.

¿Qué es Scaffold?

Scaffold es una herramienta que nos ofrece Rails para poder generar una estructura básica del CRUD de un modelo en nuestros proyectos.

CRUD

El término CRUD representa las cuatro operaciones básicas de una aplicación web:

Crear (Create), Leer (Read), Actualizar (Update) y Eliminar (Delete)

Tradicionalmente lo que hariamos sería escribir manualmente cada uno de los componentes necesarios para crear el CRUD, esto significa definir el controlador, el modelo, las vistas y las rutas uno por uno.

Como se hace el CRUD de un modelo sin scaffold:

En este caso crearemos un modelo de productos, en donde cada producto tendrá un nombre, descripción, precio y stock.

Cuando queremos crear un CRUD de forma manual en Rails lo hacemos de la siguiente forma:

1. Generar el modelo y la migración:

En la terminal ejecutaremos el siguiente comando para generar el modelo de productos

rails generate model Product name:string description:string price:decimal stock:integer

Esto generará un archivo de migración en la carpeta db/migrate. Para aplicar la migración y crear la tabla de productos en la base de datos, ejecutamos:

rails db:migrate

2. Generar el controlador:

A continuación, vamos a generar el controlador para manejar las acciones relacionadas con los productos.

Ejecutando el siguiente comando en la terminal:

rails generate controller Products

3. Definir las acciones del controlador:

Abrimos el archivo app/controllers/products_controller.rb y agregamos las siguientes acciones:

#permite ver todos los productos
def index
	@products = Product.all
end

#permite ver un producto en especifico y su detalle
def show
	@product = Product.find(params[:id])
end

#permite ir a crear un nuevo producto
def new
	@product = Product.new
end

#crea y persiste el nuevo producto
def create
	@product= Product.create product_params
  if @product.persisted?
	  redirect_to products_path, notice: "El producto ha sido creado de forma exitosa"
  else
	  render :new, status: :unprocessable_entity
  end
end

#permite ir a editar un producto
def edit
	@product = Product.find(params[:id])
end

#actualiza y persiste el producto editado
def update
	@product = Product.find(params[:id])
	@product.update product_params
	if @product.update product_params
		redirect_to products_path, notice: "El producto ha sido actualizado de forma exitosa"
	else
		render :edit, status: :unprocessable_entity
	end
end

#elimina un producto
def destroy
	@product = Product.find(params[:id])
	@product.destroy
	redirect_to products_path,
	status: :see_other, notice: "El producto ha sido eliminado de forma exitosa"
end

private

	#En este caso estamos usando strong params
	def product_params
		params.require(:product).permit(:name, :description, :price, :stock)
	end**
	

Si quieres saber más sobre strong params puedes revisar el siguiente artículo

4. Crear las vistas:

A continuación, necesitamos generar las vistas que se utilizarán para mostrar y manipular los productos.

Para esto crearemos los archivos correspondiente a new, show y edit de esta forma:

Siguiendo este ejemplo para la vista de new:

  • En el archivo app/views/product
  • new.html.erb (en caso que estemos usando erb)

5. Personalizar las vistas:

Ahora, abriremos los archivos donde personalizaremos el código según nuestras necesidades.

Para el index.

En app/views/productos/index.html.erb, podríamos tener algo como esto:

<h1>Lista de Productos</h1>
<ul> 
	<% @products.each do |product| %>
		<li><%= product.name %> - <%= product.price %></li> 
	<% end %>
</ul>

Para new

<h1>Nuevo producto</h1>

<%= form_with model: @product do |form| %>
  <div>
    <%= form.label :name%><br>
    <%= form.text_field :name%>
  </div>

  <div>
    <%= form.label :desciption%><br>
    <%= form.text_area :description %>
  </div>

  <div>
    <%= form.label :price%><br>
    <%= form.text_field :price%>
  </div>

  <div>
    <%= form.label :stock%><br>
    <%= form.text_field :stock %>
  </div>

  <div>
    <%= form.submit %>
  </div>
<% end %>

Edit puede usar el mismo formulario pero adaptando el título o usando un partial

Para ir a editar y eliminar el producto podriamos agregar los botones correspondientes en la vista show de esta forma:

<div>
	<h2><%= @product.name%></p>
	<h3><%= @product.description %></p>
	<p><%= @product.price %></p>
	<p><%= @product.stock %></p>
	<%= link_to 'Edit this product', edit_product_path(@product) %>
	<%= button_to 'Destroy this product', product_path(@product), method: :delete%>
</div>

6. Configurar las rutas:

Por último, necesitamos configurar las rutas, esto lo podemos hacer de forma manual o usando resources que ayudará a crear todas las rutas correspondientes al CRUD:

  • En el archivo config/routes.rb
resources :products

Volviendo a scaffold

Todo lo que acabamos de hacer manualmente lo podemos hacer en un par de segundos con scaffold de la siguiente forma

rails generate scaffold Product name:string description:string price:decimal stock:integer

Con solo una simple línea de comando, generamos automáticamente el conjunto de controladores, modelos, vistas y rutas necesarios para administrar ese modelo en la base de datos.

Conclusión:

Aunque el método manual demora más, nos ayuda a comprender de forma profunda como es que funcionan todos los componentes de una aplicación. En cambio, con Scaffold podremos hacerlos de forma muy rápida y sencilla

La elección final de si usaremos Scaffold o no, dependerá de las preferencias y necesidades de cada desarrollador.

Gracias por leer este artículo, mucho éxito en tus proyectos!

Aumenta tu productividad con GitHub Copilot

  • done Curso GRATUITO
  • done Regístrate antes del 31 de Marzo
  • done Obtén una ventaja competitiva
  • done Aprovecha la IA a tu favor
Más información