10 Abril 2008

Entendiendo el flujo de una aplicación rails

escrito por edgar js en General |

Nota: No tengo nada en contra del idioma español, pero personalmente creo que para la programación la mejor opción es el inglés. Y más aún programando en ruby ya que gracias a sus sintáxis tan fluída es como si estuvieramos armando sentencias. Por esto, aún siendo este blog en español se escribirán los ejemplos en inglés. Si tienes problemas con el idioma siempre puedes preguntar por los significados.

Rails sigue el patrón Modelo-Vista-Controlador (MVC), que es una estructura de software en la que se separa la aplicación en tres partes fundamentales para su mejor organización y manejo.

Modelo

Se encarga de la lógica de datos, no tiene porqué tener interacción con el usuario. En rails es gestionado por ActiveRecord, el cual mapea la base de datos a objetos en la aplicación.

Para ejemplificar un poco, supongamos que tenemos una clase User de ActiveRecord por lo que existirá una tabla users¹ en la base de datos. Eso significa que cada fila en la tabla se convertirá en un objeto para la aplicación, y las columnas serán entonces los atributos del objeto.

Mapeo ActiveRecord

Los modelos se encuentran en el directorio app/models y el nombre los archivos es en singular (user.rb).

Controlador

Es el puente entre el modelo y la vista. Se encarga de procesar las peticiones y las respuestas. En rails es gestionado por ActionController.

Las URLs se mapean a su correspondiente acción en el controlador. Los métodos en el controlador se conocen como acciones.

Mapeo ActionController

Los modelos se encuentran en el directorio app/controllers y el nombre de los archivos es en plural + _controller (users_controller.rb).

Vista

Se encarga del render de la página final. Muestra la parte visual de la aplicación para el usuario. Cada acción en el controlador corresponde a una vista. En rails es gestionado por ActionView.

Mapeo ActionView

Las vistas se encuentran en el directorio app/views bajo el subdirectorio correspondiente al controlador. Los archivos se nombran de manera especial según el contenido y el render, pero generalmente es de la forma show.html.erb (La acción es show, el tipo es html y el render es por erb.

Entonces, el flujo de una aplicación rails sería de la siguiente manera:

Flujo MVV

¹Siguiendo la convención de rails, el modelo se nombra en singular mientras la tabla correspondiente debe ser nombrada en plural. Rails es inteligente por lo que si creamos un modelo Person usará la tabla people.

Esta entrada fue escrita el Jueves, 10 de Abril de 2008 a las 1:01 pm y está guardada en General. Puedes seguir las respuestas a esta entrada através del RSS 2.0 feed. Puedes dejar una respuesta, o trackback desde tu sitio.

Actualmente hay 3 respuestas a “Entendiendo el flujo de una aplicación rails”

Déjanos saber lo que piensas! Tu opinión es tan válida como la de los demás así que, vamos... déjanos saber lo que piensas.

  1. 1 Gravatar Icon El 4 de Junio de 2008, Enrique dijo:

    Soy demasiado nuevo en RoR, recien estoy experimentando y me he trabado en el inicio de sesion. Resulta que encontre el plugin restful_authentication, que lo hace automáticamente. Hasta ahi todo mas que bien, pero para un futuro proyecto estuve probando de agregarle nivel de acceso. El problema que tengo es que no encuentro la forma de hacer referencia a la tabla y me extraiga el campo de nivel que le agregue. Si uso find estoy buscando nuevamente en la tablay lo que necesito es hacer referencia a la tabla y de ahi si utilizar tabla.nivel. Desde ya muchas gracias

  2. 2 Gravatar Icon El 4 de Junio de 2008, Edgar dijo:

    Hola Enrique.

    El secreto de todo está en los modelos, enfócate a ellos para obtener una solución. Para tu caso pongamoslo asi: (en vez de nivel llamemosle rol)

    Un usuario puede tener muchos roles, y un rol puede tener muchos usuarios.. entonces es una relación muchos-a-muchos cierto? Ok, este tipo de relaciones en rails generalmente son un poco complicadas de manejar ya que la relación se hace através de una tabla en común (roles_users) en donde cada fila hacen un id único.

    Sería un poco extenso explicar estas relaciones en un comentario, estoy preparando una serie de screencasts en los que podría incluir este planteamiento. Pero por el momento, puedo sugerirte otro plugin que te hará las cosas mucho más fáciles (así como restful_authentication lo hizo):

    ACL System2 http://agilewebdevelopment.com/plugins/acl_system

    Lee el archivo README para ver ejemplos y entender cómo usarlo.

    Saludos.

  3. 3 Gravatar Icon El 12 de Junio de 2008, César Tabares dijo:

    Puedes combinar restful_authentication con acl_system2 que es un plugin para acceso controlado por listas. Yo lo probe y funciona muy bien. Se pueden definir usuario y roles y en los controladores se especifica los derechos de acceso. Por ejemplo (fragmento de la documentacion):

    class PostController [:list, :index]
    access_control :new => ‘(admin | user | moderator) & !blacklist’,
    :create => ‘admin & !blacklist’,
    :edit => ‘(admin | moderator) & !blacklist’,
    :update => ‘(admin | moderator) & !blacklist’,
    :delete => ‘admin & (!moderator | !blacklist)’

    saludos !

Deja una Respuesta

  • Enlázanos

  • México On Rails
  • Pregunta

  • Si tienes alguna duda o quisieras leer sobre algún tema en específico, no dudes en contactar con nosostros.