En este video aprenderemos a obtener una visión general de alto nivel de cómo Rails trabaja por dentro las aplicaciones. Ustedes puede haber notado que la estructura de la aplicación Rails:
Tiene un directorio de la aplicación llamada app/ con tres subdirectorios: modelos , vistas y controladores. Esto es un indicio de que Rails sigue el patrón arquitectónico model-vista-controlador (MVC), que impone una separación de la "lógica del dominio" (también llamada " lógica de negocio " ) y la "lógica de presentación" que está asociada con la interfaz gráfica de usuario (GUI). En el caso de las aplicaciones web, la "lógica de dominio" por lo general se compone de modelos de datos para cosas como los usuarios, artículos y productos, y la interfaz gráfica de usuario es sólo una página web en un navegador web.
El Modelo Vista Controlador permite separar nuestro código en tres partes:
-
El Modelo: Está formado por clases, cada clase es un modelo, y cada modelo representa una tabla en la base de datos. Por tanto el Modelo es el encargado de trabajar con la lógica de la base de datos. Nosotros podríamos tener un Modelo Persona y una tabla personas, desde la clase Persona trabajaremos con todo lo relacionado a la tabla personas.
-
La Vista: Es la representación final de una petición, dentro de una vista hay más que nada código html, seguramente también habrá código Ruby, pero será mínimo, como imprimir una variable por pantalla o mostrar un listado de un arreglo. Pero más que nada la Vista se encargará de la presentación, lo que ve el visitante y no de la lógica de la petición.
-
El Controlador: Este, en cambio, sí se encargará de la lógica de la petición. A su vez hará de puente entre el Modelo y la Vista. Cada controlador será una clase con métodos, y por cada método habrá una vista que representará la versión procesada de ese método.
Al interactuar con una aplicación Rails, un navegador envía una solicitud, la cual es recibida por un servidor web y se transmite a un controlador de Rails. En algunos casos, el controlador hará que una vista que es una plantilla convertida a HTML, se envíe de vuelta al navegador. Además, el controlador interactúa con un modelo , que es un objeto Ruby que representa un elemento del sitio (por ejemplo, un usuario) y está a cargo de la comunicación con la base de datos. Después de invocar el modelo, entonces el controlador representa la vista y devuelve la página web completa en el navegador como HTML.
Crearemos un pequeño scaffold para explicar el funcionamineto del MVC.
El primer paso sreá crear el modelo de datos. En nuestro caso será un blog solo con un usuario y entradas cortas.
Los usuarios de nuestra aplicacion demo tendrán un único identificador entero llamado id. Un nombre (string) y un e-mail (string) visible publicamente.
Como veremos mas adelante el nombre users, corresponde a una tabla en una base de datos y los atributos id, name, e-mail son columnas de esa tabla.
En esta sesion implementaremos el modelo de datos de los usurios, junto con una interfaz web para el modelo.
Vamos a pensar en un recurso de usuario, el cual nos permitirá pensar en los usuarios como objetos que se pueden leer, actualizar y eliminar a través del protocolo http. Nuestro recurso usuario será creado por un programa generador de código llamdo scaffold el cual viene como estándar con cada proyecto de Rails.
Entonces,
$ rails generate scaffold User name: string email:string
Los argumnetos que se pasan al comando scaffold son el nombre del recurso (User) junto con parámetros opcionales para los atributos del módulo de datos.
Al incluir nombre y email hemos organizado el modelo de Usuario de la imagen anterior. No hay necesidad d incluir el parámetro id, pues éste es creado automáticamnete por Rails para el uso de la clave principal o primary key de la Base de Datos.
Para continuar debemos migrar la Base de Datos con RAKE.
$bundle exec rake db:migrate
Si usas RVM hacer:
$rake db:migrate
Esto simplemente actualiza la Base de Datos con un nuevo modelo de usuarios. Tener en cuenta
Buena explicación Elicia, muchas gracias por la aclaración.