Devise es una gema que facilita la implementación de la autenticación en las aplicaciones.
Al momento que ejecutamos rails g devise:install
Devise crea, entre otras cosas, las siguientes rutas:
Ruta | Nombre | Descripción |
---|---|---|
GET/users/sign_up |
new_user_registration new_user_registration_path |
registrations/new.html.erb Formulario de registro |
POST/users |
Registrarse | |
GET/users/sign_in |
new_user_session new_user_session_path |
sessions/new.html.erb Formulario de login |
DELETE/users/sign_out |
destroy_user_session destroy_user_session_path |
Para ver el listado completo de rutas podemos ejecutar el siguiente comando:
Para ello primero lanzamos el servidor de desarrollo con el comandorails s
y luego visitamos las siguientes rutas:
Para que el usuario pueda registrarse, ingresar y salir de la aplicación vamos a agregar un controlador pages como página de inicio y definirla como la ruta raíz:
Abrimos config/routes.rb
y agrega lo siguiente:
Abrimos app/views/pages/home.html.erb
y agrega lo siguiente:
Rails 7 ahora usa Turbo y el método debe llamarse un poco diferente. Así que el código fijo ahora se vería así:
Ejecutamos la migración con rails db:migrate
Asociamos el modelo de User con los Post:
Consultando la información en la tabla:
Ahora abrimos de nuevo app/views/pages/index.html.erb y agremos el link para permitirle publicar al usuario conectado (en línea:5):
Luego de eso, ya podemos publicar posts como se ve a continuación:
Por lo general, cuando visitas un Blog, el usuario se encuentra con la vista index de posts. Para redirigir y permitir mostrar esta vista, tenemos varias opciones.
Opción 1: dejar post index como ruta root:
Opción 2: renombrar la ruta index de post, como "user_root", de esta forma cuando inicia sesión el usuario de va a redirigir a esta ruta:
Opción 3: Sobreescribir el método de Devise after_sign_in_path_for
:
Fuente: Wiki Devise
Pagy es una gema que está disponible para la paginación y que está tomando mucha popularidad ya que presume ser la mejor en cuanto a eficiencia y optimización.
Agregamos la gema pagy al proyecto:
Abrimos el archivo app/controller/aplication_controller.rb y añadimos lo siguiente:
Podemos incluir el módulo
Pagy::Backend
en cada controlador o incluirlo de forma global en el archivo que muestra el ejemplo anterior.
Abrimos el archivo app/helpers/application_helper.rb y añadimos lo siguiente:
Podemos incluir el módulo
Pagy::Frontend
en cada controlador o incluirlo de forma global en el archivo que muestra el ejemplo anterior
Una vez instalada la gema e incluidos los módulos, podemos comenzar a trabajar la paginación en las colecciones.
El primer paso es crear una instancia de la clase Pagy en nuestro controlador app/controllers/posts_controller.rb podemos usar el método pagy
y pasarle la colección que queremos paginar, esto creará una instancia y devolverá el objeto de Pagy por nosotros:
Esto nos permite acceder fácilmente a la información sobre la paginación, como la página actual, la cantidad de elementos por página y la cantidad total de páginas.
Para ver el funcionamiento hasta ahora, podemos agregar lo siguiente en nuestro archivo db/seeds.rb:
Y ejecutamos la siembra con rails db:seed
, con esto tendremos una buena cantidad de posts para la demostración:
El módulo Pagy::Frontend
ofrece varios métodos útiles para facilitar la visualización y los aspecto de navegación de la paginación, como los siguientes helpers para usar en las vistas:
<%== pagy_nav(@pagy) %>
: <%== pagy_info(@pagy) %>
: Esto mostrará los enlaces de paginación en el formato estándar, pero también podemos personalizar la apariencia usando diferentes estilos. Por ejemplo, podemos usar el helper pagy_bootstrap_nav
. En primer lugar debemos incluir este extra en config/initializers/pagy.rb
:
Y ahora en lugar de usar <%== pagy_nav(@pagy) %>
usamos el siguiente helper en la vista:
<%== pagy_bootstrap_nav(@pagy) %>
: Por medio de un nuevo archivo que podemos crear en config/initializers/pagy.rb, podemos modificar todas las opciones que nos proporciona Pagy aquí 👈, esto afectará a todos los objetos de Pagy.
Abrimos el archivo config/initializers/pagy.rb y agregamos lo siguiente:
Todas las asignaciones con
Pagy::DEFAULT[:key]
se fusionarán con cada nueva instancia de Pagy
Se necesita cargar un diccionario para el idioma español. Pagy ya proporciona varios diccionarios listos para usar en nuestras aplicaciones, entre ellos se encuentra el disponible en este archivo 👈 el de español.
Para usar esta configuración integrada abrimos el archivo config/initializers/pagy.rb y agregamos lo siguiente:
Esta es una subclase de Pagy que proporciona paginación sin necesidad de ningún :count
, lo que resulta ser especialmente útil en los siguientes casos:
Para configurar este modo, debemos abrir config/initializers/pagy.rb
Abrimos la vista de posts app/views/posts/index.html.erb:
Creamos un nuevo archivo en app/views/index.turbo_stream.erb y la añadimos lo siguiente: