¿Cómo hacer funcionar ActiveAdmin en una aplicación Rails habilitada como API?

Como les comentaba en otro post, nuestro stack por defecto se basa en Ruby on Rails como servidor back-end y React para el front-end. Muchas veces el front-end solo se utiliza para la funcionalidad del usuario final, pero por lo general, se necesita un lugar para que un administrador, pueda revisar/manejar los datos de la aplicación.

Cuando utilizamos Ruby on Rails como servidor de back-end, solemos crear la aplicación en modo API, de esta manera, se deshabilitan algunas funcionalidades que no se usarán como renderización de vistas o el uso de sessiones, etc.

rails new mi_api --api # Con esto creamos una app rails en modo API

Probablemente el servidor API sea una buena opción en donde colocar la sección de administración de la aplicación, una de las maneras de hacerlo en forma "fácil" es usando alguna gema de administración como por ejemplo ActiveAdmin.

Al no tener todo el middleware de rails habilitado, probablemente ActiveAdmin genere problemas, los siguientes pasos nos ayudarán a configurar nuestra aplicación en modo API para que ActiveAdmin pueda funcionar:

  1. Habilitar sprockets para que Active Admin pueda usar los assets

Para esto, necesitamos modificar el archivo config/application.rb y descomentar la sección

require "sprockets/railtie"

2. Habilitar cookies si vamos a usar Devise (o alguna otra gema de autenticación)

En el mismo archivo config/application.rb debemos incluir las siguientes líneas:

config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore

3. Habilitar MethodOverride

Si queremos utilizar los verbos DELETE y PATCH de HTTP los cuales en realidad son solicitudes POST con un parámetro llamado _method en el cuerpo de la solicitud, debemos agregar lo siguiente en config/application.rb

config.middleware.use Rack::MethodOverride

4. Habilitar mensajes tipo flash (notice/alert)

Para poder renderizar los mensajes tipo flash en las páginas, debemos agregar la siguiente línea en config/application.rb

config.middleware.use ActionDispatch::Flash

5. Modificar ApplicationController

ActiveAdmin utiliza/depende de ApplicationController para funcionar correctamente dado que sus controladores heredan de esta clase. En aplicaciones modo API, por defecto ApplicationController hereda de ActionController::API lo cual hace, que ActiveAdmin no se ejecute de forma adecuada, para solucionar esto debemos modificar ApplicationController para que herede de ActionController::Base. Al hacer esto, necesitaremos crear un nuevo controlador para nuestra sección del API, por lo que podemos crear una clase ApiController(el nombre no importa pero queda bien para API, ¿no?) que herede de ActionController::API y hacer que nuestros controladores hereden de ella.

Al final, nuestro archivo config/application.rb debe lucir similar a este

application.rb

Conclusión

Aunque al comienzo nos dio algunos dolores de cabeza configurar de manera correcta nuestra aplicación en modo API para usar ActiveAdmin, luego pudimos hacer muchas cosas chéveres usando React y Ruby on Rails juntos siguiendo estos simples pasos.

Si te gustó esta historia, aplaude tantas veces como quieras y para ver historias similares acerca de tecnología, mira nuestras publicaciones y escribe en los comentarios cualquier duda que tengas.

Si necesitas un equipo que te ayude a implementar tus ideas en React JS o Nativo, no dudes en avisarnos. Puedes ir a nuestro sitio web y llenar el formulario para que iniciemos el contacto.

Gustavo
Mail: gustavo@alturasoluciones.com
Twitter: @Aguardientico
LinkedIn: www.linkedin.com/in/gustavoagonzalez
Blog personal: http://aguardientech.blogspot.com