En esta práctica se inició la creación del proyecto Depot utilizando Ruby on Rails, integrando TailwindCSS como framework visual y Active Storage para la gestión de imágenes.
1. Creación del proyecto
Se inicia el proyecto con:
rails new depotcd depotEste comando genera toda la estructura base del proyecto, incluyendo soporte para JavaScript, CSS y los microframeworks necesarios para el desarrollo web.
También puede iniciarse directamente con TailwindCSS:
rails new depot --css tailwind2. Generación del modelo y Scaffold
Se genera el modelo Product con sus campos:
bin/rails generate scaffold Product \title:string description:text image:attachment price:decimalEsto crea automáticamente el modelo, el controlador, las vistas y la migración inicial.
En el archivo db/migrate/2025xxxx_create_products.rb, se ajusta la precisión de los precios:
t.decimal :price, precision: 8, scale: 2Esta configuración define que el precio tendrá hasta 8 dígitos en total, con 2 decimales.
3. Configuración del almacenamiento de imágenes
Para manejar archivos adjuntos (como imágenes), se instala Active Storage:
bin/rails active_storage:installbin/rails db:migrateEsto crea las tablas necesarias para guardar referencias a los archivos.
También se incluye en el controlador principal:
include ActiveStorage::SetCurrentEsto permite a Rails mantener una sesión activa de almacenamiento para cada usuario.
4. Integración de TailwindCSS y vistas
Para que TailwindCSS funcione en tiempo real:
bin/rails tailwindcss:watchCTRl + Cbin/rails serverEn la vista del formulario (form.html.erb), se aplican clases dinámicas para los campos y validaciones visuales:
<div class="my-5"> <%= form.label :description %> <%= form.text_area :description, rows: 10, class: ["block shadow-sm rounded-md border px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": product.errors[:description].none?, "border-red-400 focus:outline-red-600": product.errors[:description].any?}] %></div>
<div class="my-5"> <%= form.label :image %> <%= form.file_field :image, accept: "image/*", class: ["block shadow-sm rounded-md border px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": product.errors[:image].none?, "border-red-400 focus:outline-red-600": product.errors[:image].any?}] %></div>Tailwind permite crear interfaces limpias y responsivas sin escribir CSS manual.
5. Carga de datos con Seeds
Para añadir productos de prueba en la base de datos se usa seeds.rb:
mkdir imagescp ../../../Downloads/code/rails80/depot_a/db/images/*.jpg .bin/rails db:seedEsto permite insertar registros iniciales en la base de datos. Usando DB Browser for SQLite, pueden visualizarse los productos cargados.

6. Renderizado y actualización automática
Rails maneja HTML5 de forma transparente: cuando un producto cambia, la lista se actualiza automáticamente en la vista index.html.erb.
Gracias a la integración de Active Storage y Tailwind, las imágenes y estilos se actualizan de forma sincronizada, mejorando la presentación y consistencia del sistema.
Glosario
| Término | Definición |
|---|---|
| Scaffold | Generador automático que crea modelo, controlador, vistas y rutas básicas para CRUD. |
| Active Storage | Sistema de Rails para gestionar archivos adjuntos (imágenes, PDFs, etc.). |
| TailwindCSS | Framework CSS basado en clases utilitarias para diseño rápido y flexible. |
| Precision / Scale | Definen la cantidad total de dígitos y decimales en un campo numérico. |
| Seeds | Datos iniciales cargados en la base de datos con db:seed. |
| Include ActiveStorage::SetCurrent | Permite a Rails enlazar los archivos al contexto actual del usuario o sesión. |
| HTML5 Transparente | Rails genera y gestiona código HTML de fondo sin intervención manual. |
Reflexión final
En esta práctica comprendimos cómo Rails automatiza la estructura del proyecto, integrando de forma transparente TailwindCSS, Active Storage y migraciones. Esto permite desarrollar aplicaciones visuales, consistentes y dinámicas sin depender de configuraciones manuales, aplicando los principios de convención sobre configuración y automatización inteligente.