Retomando la serie

  1. Instalamos la gema Devise.
  2. Configuramos la gema y editamos el layout principal de nuestra aplicación.
  3. Creamos un archivo partial para las notificaciones de nuestra aplicación.

Ruby on Rails hace uso de la arquitectura MVC, para quienes no estén muy familiarizados con esta, se puede resumir en lo siguiente:

  • Modelo: Son nuestras clases, a partir de las cuales creamos objetos. Se comunican con los controladores para enviar y recibir información.
  • Controlador: El controlador es nuestro conector entre las peticiones del cliente y las respuestas desde la base de datos. Modelo <–> Controlador <–> Vista.
  • Vista: Es la plantilla en la cual el usuario puede visualizar los resultados de su petición a nuestra aplicación. Recibe información de los controladores.

https://betterexplained.com/wp-content/uploads/rails/mvc-rails.png

Créditos: https://betterexplained.com/articles/intermediate-rails-understanding-models-views-and-controllers/

Con esta breve explicación, podemos continuar generando el modelo de usuario, gracias a Devise.

$ rails g devise User

Después de la magia de Devise, tendremos nuestro modelo User creado. Para hacer cambios en nuestra base de datos, deberemos correr las migraciones, por defecto Rails genera una cada vez que creas un modelo desde la terminal.

$ rails db:migrate

Nota: En Ruby on Rails 5 se hace uso de rails en lugar de rake.

Entre varias de las cosas que hicimos al generar el modelo, Devise añadio una línea a nuestro routes.rb, la cual usa para todas las rutas de usuario.

Así debería de verse tu archivo de routes por el momento.

Como podrás ver, el desarrollo en Ruby on Rails es muy rápido y divertido, no tuvimos que crear un modelo por nuestra cuenta, ni los controladores para registros, sesiones, etc. Esa es la principal razón por la que muchas startups usan Rails.

Reinicia el servidor de Rails, y podrás navegar a localhost:3000/users/sign_up para crear un nuevo usuario, una vez lo crees serás redirigido a una página de error, pero no te preocupes, simplemente no hemos creado la vista que estamos tratando de mostrar en ese momento, lo solucionaremos cuándo generemos el modelo de Facts. Adicionalmente, puedes navegar a localhost:3000/users/sign_in para iniciar sesión, y a localhost:3000/users/edit para editar tus credenciales.

Recuerda que en todo momento puedes ver las rutas de tu aplicación con el comando

$ rails routes

Por el momento no tenemos una aplicación muy interesante para nuestros usuarios, se pueden registrar, iniciar sesión y editar sus detalles, pero aún no pueden interactuar con otros usuarios, es una aplicación muy aburrida.

Comencemos a solventar este problema, generemos un nuevo modelo para nuestra aplicación:

$ rails g model Fact title:string body:text user:references

Ya que es la primera vez que utilizamos el generador de modelos de Rails, explicaré que esta ocurriendo:

  1. Se crea una nueva clase llamada Fact, puede ser ubicada en “app/models/fact.rb”
  2. Se genera una migración con los campos que especificamos, esta creara la tabla “facts” y las columnas que hemos indicado, en nuestro caso title, body y user.
  3. Genera el archivo “test/models/fact_test.rb”, en el cuál puedes hacer tests a tu nueva clase. En esta serie de tutoriales no se cubrirá el proceso de testing, es recomendado que el lector investigue por su cuenta e implemente tests en la aplicación.

Hay un factor importante que debo explicar, al pasar user:references lo que estoy haciendo es generar una columna foreign_key que hace referencia a un usuario, de esta forma podemos ver quién creo determinado Fact. Nuestro modelo Fact, tiene una línea que ha sido generada automáticamente de igual manera:

belongs_to :user

De esta forma podremos usar ActiveRecord para obtener datos del usuario que crea un Fact de una manera similar a

fact.user.email

Bastante simple, ahora debemos correr las migraciones para que la tabla y las columnas mencionadas sean creadas.

$ rails db:migrate

Por último, generaremos el controlador para nuestros Facts:

$ rails g controller Facts

Nota: al crear modelos se debe pasar el nombre en singular, al crear controladores, en plural.

Eso es todo por el momento, el código del controlador es un poco extenso así que requiere un artículo entero, por lo tanto, en la próxima entrega veremos como crear, mostrar, editar y eliminar facts.