1. Manejo de la Base de Datos
Para trabajar con SQLite podemos usar DB Browser for SQLite, que nos permite visualizar y modificar tablas de manera sencilla. Por ejemplo, podemos tener una tabla llamada blue para pruebas.
2. CRUD de Productos
Ruby on Rails facilita la creación de aplicaciones CRUD (Create, Read, Update, Delete) de manera organizada usando controladores, vistas y modelos.
2.1 Crear y Editar Productos
El proceso de crear (new y create) y editar (edit y update) registros es muy similar. Para mantener el código limpio, podemos usar un before_action que ejecute código común antes de las acciones:
class ProductsController < ApplicationController before_action :set_product, only: %i[show edit update destroy]
def index @products = Product.all end
def show end
def new @product = Product.new end
def create @product = Product.new(product_params) if @product.save redirect_to @product else render :new, status: :unprocessable_entity end end
def edit end
def update if @product.update(product_params) redirect_to @product else render :edit, status: :unprocessable_entity end end
def destroy @product.destroy redirect_to products_path end
private
def set_product @product = Product.find(params[:id]) end
def product_params params.require(:product).permit(:name) endendExplicación:
before_action :set_productevita repetirProduct.find(params[:id])en varias acciones.product_paramsdefine qué atributos pueden ser modificados desde un formulario (prevención de ataques de mass assignment).
2.2 Extracting Partials (Reutilización de Formularios)
Para evitar duplicar código entre new y edit, Rails permite usar partials, que son fragmentos de vistas reutilizables.
Creamos un archivo _form.html.erb:
<%= form_with model: product do |form| %> <div> <%= form.label :name %> <%= form.text_field :name %> </div> <div> <%= form.submit %> </div><% end %>Luego, lo llamamos desde las vistas new y edit:
<h1>New Product</h1><%= render "form", product: @product %><%= link_to "Cancel", products_path %><h1>Edit Product</h1><%= render "form", product: @product %><%= link_to "Cancel", @product %>Ventajas de los partials:
- Evitan errores por duplicación de código.
- Mantienen consistencia en toda la aplicación.
- Facilitan el mantenimiento: cualquier cambio en el formulario se refleja en todos los lugares donde se usa.
2.3 Eliminar Productos
Para eliminar productos, agregamos la acción destroy al controlador y un botón en la vista:
<%= button_to "Delete", @product, method: :delete, data: { turbo_confirm: "Are you sure?" } %>Nota:
button_togenera un formulario con un solo botón que envía una petición DELETE. El atributoturbo_confirmmuestra un mensaje de confirmación antes de eliminar.
3. Autenticación de Usuarios
Por seguridad, no queremos que cualquier persona pueda crear, editar o eliminar productos. Rails permite agregar autenticación de forma rápida:
- Generar autenticación:
bin/rails generate authenticationEsto crea los modelos User y Session, con controladores y vistas necesarias.
- Migrar la base de datos:
bin/rails db:migrate- Crear un usuario desde la consola Rails:
User.create! email_address: "you@example.org", password: "s3cr3t", password_confirmation: "s3cr3t"- Reiniciar el servidor:
bin/rails serverAhora, al visitar /products/new o /products/:id/edit, Rails pedirá autenticación.
Rails usa BCrypt para almacenar contraseñas de manera segura (hashing).
Glosario de términos
- Partial: Fragmento de una vista reutilizable en varias páginas. Se nombra con
_al inicio. - before_action: Método que se ejecuta antes de ciertas acciones del controlador para evitar duplicación de código.
- CRUD: Acrónimo de Create, Read, Update, Delete.
- BCrypt: Biblioteca que permite encriptar contraseñas de manera segura.
- Mass Assignment: Intento de modificar atributos del modelo que no deberían cambiarse desde un formulario.
- Turbo: Librería de Rails que mejora la interacción de vistas sin recargar toda la página.