Rails + Devise utiliser plusieurs models

Posted by ZedTuX 0n R00t on January 8, 2015

Habituellement lorsque vous travaillez avec Devise vous aurez des utilisateurs. Dans ce cas, Devise est très simple d’utilisation: 1 ligne de commande et vous êtes prêt.

Mais lorsque vous désirez travailler avec plusieurs models tell qu’un model User et un model Admin alors Devise se révèle plus compliqué. Il y a des personnes qui préfèrerons ne pas créer les deux models et plutôt utiliser des techniques telle que les Concern (en) ou autres.

Personnellement je désire avoir 2 models.

Il y a du nouveau

Depuis le 13 Aout 2014 un nouveau helper a été ajouté dans Devise:

1
2
3
4
5
3.3.0 - 2014-08-13
 - enhancements 
 	...
    - Adds devise_group, a macro to define controller helpers for multiple mappings at once. (by @dropletzz)
    ...

Dropletzz a implémentés une méthode dite “helper” qui vous permet de définir un group de “mappings” qui va générer des méthodes comme expliqué dans la documentation.

Comment utilisé devise_group

Dans mon cas j’en ai besoin partout dans mon application donc j’ai ajouté le code suivant dans mon ApplicationController:

1
2
3
4
5
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  devise_group :person, contains: [:user, :admin]
  before_action :authenticate_person! # Ensure someone is logged in
end

Maintenant je peux utiliser current_person partout dans mon application où le code est commun aux classes User et Admin. Les méthodes current_user et current_admin sont toujours disponible ce qui est cool.

Merci

Je tiens a remercier Dropletzz :) ainsi que vous qui lisez cet article.