sábado, 21 de marzo de 2015

Tutorial Ruby on Rails: Parte III


​En este tutorial continuaré con el framework Ruby on Rails. Ya llevamos recorrido con la parte I y la parte II:
  • Crear un proyecto.
  • Trabajar con controladores.
  • Agregar un modelo.
  • Uso de la plantilla.
  • Usar la herramienta Scaffold.
  • Migraciones.
  • Consultas a base de datos.
  • Manejo de sesión.

Consulta aquí el último commit del proyecto.

Nota: Se asume que ya se tiene al menos un usuario registrado en la aplicación.

1 - Herramienta de administración

Para contar con una herramienta de administración vamos a nuestro Gemfile y agregamos gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git'. En caso de que estén trabajando con Ruby versión 1.8 o menor agreguen esta gema también gem 'fastercsv'.

Luego instalamos las nuevas dependencias bundle install, generamos rails generate rails_admin:install (automáticamente tendremos la ruta al admin agregada) y migramos rake db:migrate.

Ya con esto podemos visitar nuestra herramienta accediendo a localhost:3000/admin y veremos la siguiente pantalla:


Con esta herramienta ya somos capaces de brindar servicios de administración para el manejo de nuestros de datos a través de una interfaz muy amigable.

Con un admin podemos acceder a nuestras tablas de la base de datos y hacer todas las operaciones de costumbre (crear, actualizar, eliminar, entre otras), pero lo más importante es que podemos corregir errores rápidamente, porque al hacer pruebas y casos bordes que no hemos visto, son comúnmente situaciones que tenemos que enfrentar.

Ahora bien ¿a esta poderosa herramienta debe acceder todo usuario? por supuesto que no, así que vamos agregar permisos. Primero vamos agregar que sólo puede acceder un usuario que haya iniciado sesión, eso lo logramos descomentando en el archivo /config/initializers/rails_admin.rb las líneas que tienen el código sobre devise.

Ok ahora sólo los usuarios que tengan una sesión iniciada podrán acceder al admin, pero no es suficiente todavía, porque por ahora se registra cualquier persona muy fácilmente con su correo y una contraseña, así que agreguemos un atributo que indique si el usuario es o no administrador.
  • Primero agregamos la gema cancan a nuestro Gemfile, luego lo instalamos con bundle install y generamos el modelo ability con el comando rails generate cancan:ability.
  • Modificamos el archivo /app/models/ability.rb para que luzca como el siguiente:
  • Luego descomentamos la línea de código que refiere a Cancan en el archivo config/initializers/rails_admin.rb.
  • Agregamos a nuestros usuarios el atributo admin, para eso creamos la migración con rails g migration AgregarAdminAUsuario y dentro de la función change agregamos add_column :users, :admin, :boolean, :default => false. Una vez que tengamos esto migramos rake db:migrate.
  • El siguiente paso es crear la función en el modelo de usuario para saber si es o no administrador, para eso modificamos el archivo /app/models/user.rb agregando la función def admin?. El archivo luce al final de esta forma:
En este momento todo funciona y verás que no existe forma de acceder al admin, ya que todos los usuarios que tengas hasta ahora por defecto no son administradores, es por eso que debemos ahora asignarle a uno de los usuarios que tengamos el valor de verdadero en el attributo admin. Una manera es que comentemos en el ability.rb la función if, accedemos a nuestro admin y le asignamos verdadero al atributo en el usuario que deseamos. Otra forma es acceder a la consola de rails y ejecutemos los comandos:
  • user = User.find(1) busca el usuario con id 1.
  • user.update_attribute(:admin, true) a es usuario actualizamos el atributo admin.
Nota: Esta no es la única herramienta de administración, existen otras que pueden conseguir si investigan. Mi objetivo con este punto es mostrar una de las herramienta disponibles de administración.

Consulta aquí el commit del proyecto donde se agrega el admin y este otro commit donde cambio los permisos.

2 - Active Records

Estas son las herramientas que nos facilitan a la creación y uso de nuestro modelo. Así que esta parte ya la conocemos medianamente, porque es la que llamé en la parte II consulta a la base de datos. Pero ahora bien podemos estudiar un poco más los modelos que tengamos y ver que cosas interesantes extras podemos hacer.

Por ejemplo si queremos modificar el nombre de la tabla, usamos para eso dentro de nuestro modelo la variable self.table_name y le asignamos otro valor.

Otro caso que puede llegar a surgir es cambiar la clave del modelo y eso lo logramos con la variable self.primary_key.

Algo que ya hicimos fue agregar una función para determinar el valor del atributo admin en el modelo usuario.

También podemos decirle a nuestro modelo si pertenece o tiene referencias a otros modelos y lo logramos con:
  • has_many :comentarios puede servir en el caso de indicar que modelo post tiene comentarios.
  • belongs_to :post este en caso contrario, un comentario pertenece a un post.
Sin embargo la función que posiblemente nos interese especialmente es la validación de atributos, por ejemplo dentro de un formulario que tenga un atributo como requisito: el valor debe ser asignado. Esto lo logramos con esta expresión validates :nombre_atributo, presence: true.

Para más información sobre este punto puedes consultar la documentación oficial.

3 - Active Support

Es el componente que nos permite proveer a Rails todo el poder de Ruby. Esto lo logra a través de las extensiones que tenemos de:
Para más información sobre este punto puedes consultar la documentación oficial.

4 - Estilo y archivos estáticos

Para modificar un poco la apariencia vamos a cambiar el archivo de plantilla /app/views/layouts/application.html.erb y que luzca como sigue:

Los cambios realizados son:
  • Agregue la barra de navegación.
  • Agregue las instrucciones para linkear las librerías de Jquery y Bootstrap.
Ahora si vamos a agregar los archivos a sus carpetas correspondientes en la carpeta /app/assets.
  • javascripts: bootstrap.js y jquery-1.10.2.js.
  • stylesheets: bootstrap.css y bootstrap.min.css (realmente sólo hace falta uno de estos pero los dejé para modificaciones a futuro).
  • fonts: Para hacer las cosas más interesantes, cree la carpeta fonts, para mostrar la posibilidad de seguir agregando contenido, ya que pudiésemos en un futuro cargar archivos de texto plano, fotos, pdf, zips, entre otros. Para divertirnos un poco más con Bootstrap, incluyo la fuente glyphicons-halflings-regular en sus distintos formatos: eot, svg, ttf y woff.
Para acceder a todos estos archivos puedes descargarlos aquí.

Lo siguiente que tenemos que hacer es avisar a Rails que tiene que encontrar esos archivos y lo logramos creando dentro de la carpeta /config/initializers/ el archivo assets.rb, con la siguiente información:

Ya de esta forma tenemos nuestra aplicación al tanto de esos archivos y podemos visitar la página de inicio con la siguiente nueva apariencia:


Consulta aquí el commit con los cambios realizados.

Hasta este punto conocemos lo básico de Rails, pero les aseguro que pueden hacer con esta información un blog parecido a este proyecto que hice: Blog con Rails. Más cosas cheveres que hacer con Rails por supuesto que quedan, pero depende mucho de cada proyecto, ya que pudiésemos querer conectarnos con alguna red social, uso de una librería o gema específica, configuraciones con una plataforma como Heroku... Así que de esta forma lo que nos quedaría pendiente en teoría es hacer uso de tareas y pruebas en Rails.

Si algo no queda muy claro siempre me pueden escribir a mi correo tonylattke@gmail.com o también pueden dejar comentarios al final de este post y trataré de ayudarles lo antes posible.

Accede al repositorio del proyecto aquí.

No hay comentarios:

Publicar un comentario