La arquitectura MVC (Modelo-Vista-Controlador) es un patrón de diseño que separa una aplicación en tres componentes principales: el Modelo, la Vista y el Controlador. Este patrón es fundamental en Ruby on Rails y es crucial para entender cómo estructurar y organizar una aplicación Rails.
¿Qué es MVC?
- Modelo (Model): Representa los datos y la lógica de negocio de la aplicación. Es responsable de gestionar la información y las reglas de negocio. En Rails, los modelos suelen estar vinculados a una base de datos.
- Vista (View): Es la capa de presentación. Se encarga de mostrar los datos al usuario. Las vistas en Rails son plantillas que generan HTML.
- Controlador (Controller): Actúa como intermediario entre el Modelo y la Vista. Recibe las solicitudes del usuario, interactúa con el Modelo para obtener los datos necesarios y selecciona la Vista adecuada para mostrar la respuesta.
Cómo Funciona MVC en Rails
- Solicitud del Usuario: El usuario realiza una solicitud a la aplicación web (por ejemplo, al hacer clic en un enlace o enviar un formulario).
- Controlador: El controlador recibe la solicitud y decide qué acción tomar. Puede interactuar con el modelo para obtener o modificar datos.
- Modelo: El modelo realiza las operaciones necesarias, como consultar la base de datos o aplicar lógica de negocio.
- Vista: El controlador selecciona una vista para mostrar los datos obtenidos del modelo. La vista genera el HTML que se envía de vuelta al navegador del usuario.
Ejemplo Práctico
Vamos a crear un ejemplo simple para ilustrar cómo funciona MVC en Rails. Imaginemos una aplicación de blog con un modelo Post
.
- Modelo
El modelo Post
representa una entrada de blog. En Rails, los modelos se definen como clases que heredan de ApplicationRecord
.
# app/models/post.rb class Post < ApplicationRecord validates :title, presence: true validates :content, presence: true end
- Controlador
El controlador PostsController
maneja las solicitudes relacionadas con los posts. Aquí hay un ejemplo de cómo podría verse:
# app/controllers/posts_controller.rb class PostsController < ApplicationController def index @posts = Post.all end def show @post = Post.find(params[:id]) end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to @post else render :new end end private def post_params params.require(:post).permit(:title, :content) end end
- Vistas
Las vistas son plantillas que generan HTML. Aquí hay un ejemplo de la vista index
que muestra todos los posts:
<!-- app/views/posts/index.html.erb --> <h1>All Posts</h1> <% @posts.each do |post| %> <h2><%= link_to post.title, post %></h2> <p><%= truncate(post.content, length: 100) %></p> <% end %> <%= link_to 'New Post', new_post_path %>
Y aquí está la vista show
que muestra un solo post:
<!-- app/views/posts/show.html.erb --> <h1><%= @post.title %></h1> <p><%= @post.content %></p> <%= link_to 'Back to All Posts', posts_path %>
Ejercicio Práctico
Ejercicio 1: Crear un Modelo y Controlador
-
Crear el Modelo: Genera un modelo
Post
con los atributostitle
ycontent
.rails generate model Post title:string content:text rails db:migrate
-
Crear el Controlador: Genera un controlador
Posts
con las accionesindex
,show
,new
ycreate
.rails generate controller Posts index show new create
Ejercicio 2: Implementar las Vistas
- Vista
index
: Implementa la vistaindex
para mostrar todos los posts. - Vista
show
: Implementa la vistashow
para mostrar un solo post.
Solución
-
Modelo
Post
:# app/models/post.rb class Post < ApplicationRecord validates :title, presence: true validates :content, presence: true end
-
Controlador
PostsController
:# app/controllers/posts_controller.rb class PostsController < ApplicationController def index @posts = Post.all end def show @post = Post.find(params[:id]) end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to @post else render :new end end private def post_params params.require(:post).permit(:title, :content) end end
-
Vista
index
:<!-- app/views/posts/index.html.erb --> <h1>All Posts</h1> <% @posts.each do |post| %> <h2><%= link_to post.title, post %></h2> <p><%= truncate(post.content, length: 100) %></p> <% end %> <%= link_to 'New Post', new_post_path %>
-
Vista
show
:<!-- app/views/posts/show.html.erb --> <h1><%= @post.title %></h1> <p><%= @post.content %></p> <%= link_to 'Back to All Posts', posts_path %>
Conclusión
La arquitectura MVC es un patrón poderoso que ayuda a organizar y estructurar aplicaciones web de manera eficiente. En Ruby on Rails, el uso de MVC facilita la separación de responsabilidades, lo que resulta en un código más limpio y mantenible. Al comprender cómo interactúan el Modelo, la Vista y el Controlador, estarás mejor preparado para desarrollar aplicaciones Rails robustas y escalables.
Curso de Programación en Ruby
Módulo 1: Introducción a Ruby
Módulo 2: Conceptos Básicos de Ruby
Módulo 3: Trabajando con Colecciones
Módulo 4: Programación Orientada a Objetos en Ruby
- Clases y Objetos
- Variables y Métodos de Instancia
- Variables y Métodos de Clase
- Herencia
- Módulos y Mixins
Módulo 5: Conceptos Avanzados de Ruby
- Bloques, Procs y Lambdas
- Metaprogramación
- Manejo de Excepciones
- Entrada/Salida de Archivos
- Expresiones Regulares
Módulo 6: Introducción a Ruby on Rails
- ¿Qué es Ruby on Rails?
- Configuración del Entorno Rails
- Creando una Aplicación Simple en Rails
- Arquitectura MVC
- Enrutamiento
Módulo 7: Pruebas en Ruby
- Introducción a las Pruebas
- Pruebas Unitarias con Minitest
- Desarrollo Guiado por Comportamiento con RSpec
- Mocking y Stubbing
Módulo 8: Mejores Prácticas en Ruby
- Estilo de Código y Convenciones
- Refactorización
- Optimización del Rendimiento
- Mejores Prácticas de Seguridad