[!Note] Realizar la configuración de la foto.
El framework Rails permite integrar de forma transparente el diseño (CSS), la base de datos (DB) y el seguimiento automatizado del código, similar al control que se aplica en metodologías ágiles.
Podemos usar tailwind u otro framework de CSS para personalizar la interfaz sin perder la estructura del proyecto.
1. HTML o JSON: ¿Cuándo usar cada uno?
Cuando hacemos clic en una ruta, podemos observar el tipo de respuesta en:
Network → 200 - Products → Headers → Response Headers → content-type
Ahí vemos si la respuesta se devuelve en HTML o JSON, según lo que solicita el cliente. Por defecto, el navegador usa HTML, mientras que las APIs o clientes externos (como RapidAPI Client) utilizan JSON.
Ejemplo de ejecución del servidor:
Started GET "/products" for 127.0.0.1 at 2025-10-15 12:32:35 -0600Processing by ProductsController#index as */* Rendering products/index.html.erb Product Load (0.3ms) SELECT "products".* FROM "products"Completed 200 OK in 78msRails maneja automáticamente la respuesta según el formato pedido.
2. Visualización de rutas
Podemos consultar todas las rutas disponibles con:
bin/rails routesY acceder a una versión en JSON con:
https://localhost:3000/products/1.jsonRails administra las cookies y las sesiones internamente, incluso si no las declaramos.
Recordemos que HTTP/1.1 no tiene memoria, por eso cada solicitud debe enviar su contexto (por ejemplo, el id del producto).
3. Flujo de edición y actualización
Cuando editamos un producto, se ejecuta algo como:
Started GET "/products/2/edit" for 127.0.0.1Processing by ProductsController#edit as HTMLRendering products/edit.html.erbY el formulario HTML que se muestra incluye un token de autenticidad para proteger la sesión:
<form action="/products/2" method="post"> <input type="hidden" name="_method" value="patch"> <input type="hidden" name="authenticity_token" value="..."> <label for="product_name">Name</label> <input type="text" name="product[name]" id="product_name" value="Pants"></form>Al presionar Update, el servidor recibe un método PATCH, que actualiza los datos en la base de datos:
Processing by ProductsController#update as TURBO_STREAMParameters: {"product" => {"name" => "Pants"}}Product Update (0.5ms) UPDATE "products" SET "name" = 'Pants'Completed 302 Found → Redirected to /products/2El código 302 indica redirección (post-edición), y 200 confirma que la página final cargó correctamente.
4. Codificación de datos en HTTP
Existen dos formas principales de enviar datos:
- GET → Los parámetros van en la URL (URI).
Ejemplo:
https://localhost:3000/products?id=2 - POST → Los parámetros van dentro del cuerpo del mensaje, no visibles en la URL.
Rails usa PATCH (una extensión de POST) para actualizar recursos, donde el id se codifica dentro del URI.
Esto sigue el principio REST, en el que las rutas y métodos HTTP definen las acciones sobre los recursos.
5. Introspección y generación automática
Rails permite saber qué tipo de dato maneja cada elemento sin declararlo explícitamente, gracias a la introspección, lo que facilita validar, probar y mantener el código. Además, con los generadores de Rails, podemos crear estructuras CRUD completas:
bin/rails generate scaffold Product name:string price:decimalEsto crea controladores, vistas, modelos y migraciones automáticamente, reflejándose en la base de datos.
Reflexión final
Este apunte muestra cómo Rails automatiza la comunicación entre cliente y servidor, manejando rutas, formularios, validaciones y respuestas HTML o JSON. La comprensión de este flujo —de la solicitud al controlador y de vuelta al navegador— permite desarrollar aplicaciones web más seguras, coherentes y fáciles de mantener.
Glosario
| Término | Definición |
|---|---|
| Puma | Servidor web integrado en Rails para ejecutar aplicaciones Ruby. |
| Token de autenticidad | Valor generado por Rails para proteger los formularios contra ataques CSRF. |
| JSON (JavaScript Object Notation) | Formato ligero para intercambio de datos entre cliente y servidor. |
| PATCH | Método HTTP usado para modificar parcialmente un recurso. |
| Introspección | Capacidad de un lenguaje o framework para reconocer el tipo y atributos de un objeto en tiempo de ejecución. |
| REST (Representational State Transfer) | Estilo arquitectónico que define cómo interactúan los recursos web mediante rutas y métodos HTTP. |
| 302 / 200 | Códigos de estado HTTP que indican redirección y respuesta exitosa, respectivamente. |