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

  1. 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).
  2. Controlador: El controlador recibe la solicitud y decide qué acción tomar. Puede interactuar con el modelo para obtener o modificar datos.
  3. Modelo: El modelo realiza las operaciones necesarias, como consultar la base de datos o aplicar lógica de negocio.
  4. 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.

  1. 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

  1. 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

  1. 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

  1. Crear el Modelo: Genera un modelo Post con los atributos title y content.

    rails generate model Post title:string content:text
    rails db:migrate
    
  2. Crear el Controlador: Genera un controlador Posts con las acciones index, show, new y create.

    rails generate controller Posts index show new create
    

Ejercicio 2: Implementar las Vistas

  1. Vista index: Implementa la vista index para mostrar todos los posts.
  2. Vista show: Implementa la vista show para mostrar un solo post.

Solución

  1. Modelo Post:

    # app/models/post.rb
    class Post < ApplicationRecord
      validates :title, presence: true
      validates :content, presence: true
    end
    
  2. 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
    
  3. 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 %>
    
  4. 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.

© Copyright 2024. Todos los derechos reservados