En esta clase se continuó con el desarrollo del proyecto en Ruby on Rails, enfocándose en tres aspectos fundamentales: validaciones en el modelo, ruteo de peticiones HTTP, y acciones del controlador.
1. Validaciones en el Modelo
Las validaciones garantizan que los datos sean correctos antes de guardarse en la base de datos. En Rails, se realizan desde el framework, no directamente en la base de datos.
Ejemplo dentro del modelo app/models/product.rb:
class Product < ApplicationRecord validates :name, presence: true, uniqueness: true validates :price, numericality: { greater_than_or_equal_to: 0 }endEl método validate se usa para personalizar condiciones.
En la consola se pueden consultar los errores:
product.errorsproduct.errors.full_messagesRails no permite guardar un registro inválido (product.save devuelve false si falla una validación).
Esto centraliza la lógica de negocio dentro del modelo, siguiendo el principio “Don’t Repeat Yourself (DRY)“.
2. Rutas y Peticiones HTTP
Las rutas (config/routes.rb) definen cómo las peticiones llegan a los controladores y qué acción se ejecuta.
Ejemplo de ruta manual:
get "/products", to: "products#index"post "/products", to: "products#create"Cada ruta relaciona:
- Un método HTTP (GET, POST, PUT, PATCH, DELETE)
- Una ruta URL (ej.
/products/:id) - Un controlador y acción (ej.
products#show)
Rails simplifica la creación de rutas con la palabra clave resources, que genera automáticamente todas las rutas CRUD:
resources :productsComando para listar las rutas activas:
bin/rails routesEjemplo de salida:
products GET /products(.:format) products#indexproduct GET /products/:id products#shownew_product GET /products/new products#newedit_product GET /products/:id/edit products#edit POST /products(.:format) products#create PATCH /products/:id products#update DELETE /products/:id products#destroy3. Controladores y Acciones
El controlador conecta las peticiones HTTP con la lógica del modelo y las vistas.
Ejemplo básico de ProductsController:
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, :price) endendFunciones clave:
before_action→ evita repetir código (principio DRY).redirect_to→ redirige tras una acción exitosa.render→ recarga la vista si ocurre un error.params.require(...).permit(...)→ evita ataques al filtrar parámetros peligrosos (Strong Parameters).
4. Vistas y ERB
Las vistas (.html.erb) contienen código HTML y Ruby embebido (ERB – Embedded Ruby).
Ejemplo para listar productos:
<h1>Products</h1><% @products.each do |product| %> <%= link_to product.name, product %><% end %>El helper link_to genera enlaces automáticamente, y product se convierte en /products/:id gracias al sistema de rutas.
5. Formularios y Validaciones Visuales
Rails facilita la creación de formularios con form_with:
<%= form_with model: @product do |form| %> <%= form.label :name %> <%= form.text_field :name %>
<%= form.label :price %> <%= form.number_field :price %>
<%= form.submit "Guardar" %><% end %>Si hay errores en las validaciones, el formulario se recarga mostrando mensajes automáticos. Esto permite validar en el backend (modelo) y en el frontend (vista) sin duplicar lógica.
6. Eliminación de Registros
Para borrar un producto:
<%= button_to "Eliminar", @product, method: :delete, data: { turbo_confirm: "¿Estás seguro?" } %>Rails usa method: :delete y turbo_confirm para generar un formulario seguro y confirmar antes de eliminar.
Glosario
| Término | Definición |
|---|---|
| Validación | Reglas que garantizan datos correctos antes de guardar. |
| Route | Mapea URLs y métodos HTTP hacia controladores. |
| Controlador | Coordina peticiones, lógica y vistas. |
| ERB | Embedded Ruby: permite insertar Ruby en HTML. |
| Strong Parameters | Filtra los datos recibidos del usuario para evitar ataques. |
| CRUD | Operaciones básicas: Create, Read, Update, Delete. |
| DRY | Principio: “Don’t Repeat Yourself”, evita duplicar código. |
Reflexión final
Ruby on Rails combina estructura, validación y seguridad en un flujo unificado. Las rutas vinculan peticiones con controladores, los modelos validan los datos antes de guardarlos y las vistas muestran resultados dinámicos. Este enfoque permite desarrollar sistemas web coherentes, seguros y fáciles de mantener, aplicando los principios de simplicidad y automatización que caracterizan al framework.