601 words
3 minutes
2.5 Routes Controladores

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 }
end

El método validate se usa para personalizar condiciones. En la consola se pueden consultar los errores:

product.errors
product.errors.full_messages

Rails 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 :products

Comando para listar las rutas activas:

Terminal window
bin/rails routes

Ejemplo de salida:

products GET /products(.:format) products#index
product GET /products/:id products#show
new_product GET /products/new products#new
edit_product GET /products/:id/edit products#edit
POST /products(.:format) products#create
PATCH /products/:id products#update
DELETE /products/:id products#destroy

3. 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)
end
end

Funciones 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érminoDefinición
ValidaciónReglas que garantizan datos correctos antes de guardar.
RouteMapea URLs y métodos HTTP hacia controladores.
ControladorCoordina peticiones, lógica y vistas.
ERBEmbedded Ruby: permite insertar Ruby en HTML.
Strong ParametersFiltra los datos recibidos del usuario para evitar ataques.
CRUDOperaciones básicas: Create, Read, Update, Delete.
DRYPrincipio: “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.

2.5 Routes Controladores
https://jangelmm.github.io/posts/informatica/ingenieriasoftware/programacion-web/2-html-xml-y-css/25-routes-controladores/
Author
Jesús Ángel Martínez Mendoza
Published at
2025-10-08
License
CC BY-NC-SA 4.0