72 votes

Personnaliser les vues Devise dans Rails

J'utilise devise pour l'authentification des utilisateurs, mais j'ai de belles maquettes pour les pages d'inscription, de connexion, etc. J'ai déjà fait le rails generate devise:views User et que toutes les vues se trouvent dans le dossier views, cependant, lorsque j'ai remplacé le fichier registration/new.html.erb par mon propre fichier new.html.erb, rien ne change et rien ne semble différent. C'est comme si j'avais fait quoi que ce soit.

Quelqu'un sait-il ce que je fais de travers ou au moins comment personnaliser avec succès les vues de devise ?

P.S. Est-il important de noter que j'ai changé l'itinéraire de devise/registration#new en /signup ?

119voto

EmacsFodder Points 12284

Réponse en un coup d'œil.

...au lieu de

rails generate devise:views User

utiliser :

rails generate devise:views

Si vous l'avez déjà fait, déplacez les dossiers créés par devise de app/views/User dans un nouveau dossier app/views/devise (ou renommez simplement le User vers le dossier devise (si c'est possible).

Ces dossiers sont les suivants

app/views/User/confirmations
app/views/User/mailer
app/views/User/passwords
app/views/User/registrations
app/views/User/sessions
app/views/User/shared
app/views/User/unlocks

Aucune autre modification n'est nécessaire.

105voto

Promethean_Sin Points 633

Bien qu'il s'agisse d'une vieille question, j'ai pensé la compléter au cas où quelqu'un tomberait dessus. Je ne suis pas sûr qu'il s'agisse d'un nouvel ajout depuis que la question a été posée à l'origine, mais si c'est le cas, l'approche la plus simple (la plus moderne) est la suivante.

dans le fichier config/initializers/devise.rb il y a le bloc de code suivant :

# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
# config.scoped_views = false

en décommentant config.scoped_views = false et de changer sa valeur en true Dans ce cas, devise vérifiera automatiquement si la vue personnalisée existe et, si c'est le cas, la servira.

Comme l'indique le commentaire, cela peut ajouter une certaine surcharge à l'application, mais d'après mon expérience jusqu'à présent, c'est négligeable.

32voto

Kevin Tsoi Points 1225

Votre itinéraire signup o devise/registrations#new rendra la vue views/devise/registrations/new.html.erb . Il semble que vous ayez effectué des modifications views/user/registrations/new.html.erb ce qui expliquerait pourquoi vous ne voyez pas les changements effectués puisqu'il n'est pas rendu.

Vous devrez soit créer un user/registrations_controller.rb que s'étend de Devise::RegistrationsController et pointez votre /signup route vers user/registrations#new ou vous pouvez simplement effectuer vos modifications directement à views/devise/registrations/new.html.erb

La même idée s'applique à votre login ( devise/sessions ) pages.

J'espère que cela vous aidera.

25voto

Marcus W Points 146

Pour ceux qui ont encore un problème avec cela, le problème réside dans l'appel à rails generate devise:views User . Il devrait être rails generate devise:views pour récupérer les vues actuelles du moteur Devise Rails. Cela permettra de générer des vues correctes qui fonctionneront avec les routes par défaut.

10voto

iRichLau Points 479

Utilisation rails g devise:views User vous permet de personnaliser votre travail lorsque vous avez plus d'un rôle.

La bonne façon de procéder est d'aller dans votre devise.rb en config/initializer/ dossier

et en décommentant et en définissant config.scoped_views = true .

vous pouvez maintenant éditer les fichiers view erb sans problème

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X