27 votes

Concevoir dans l'espace de noms

Je suis en train de diviser mon rails de projet dans un front-end pour les utilisateurs réguliers et un back-end pour les admins. J'ai donc créé un espace de noms 'admin', de sorte que je peux facilement contrôler admin contrôleur spécifique méthodes/layouts/authentification de la carte admin.

Je suis l'aide de Concevoir pour vous inscrire/s'authentifier mes admins seulement. Parce qu'il est utilisé uniquement pour les admins seulement, je suis en train de déplacer Concevoir à l'administrateur de l'espace de noms.

Je ne pouvais pas trouver exactement ce que je cherchais dans la documentation de Concevoir, mais j'ai essayé quelque chose comme ça dans les itinéraires.rb:

namespace 'admin'do 
  devise_for :admins
end

J'ai aussi essayé de faire un custom Concevoir::Séances de contrôleur, mais il ne semble pas fonctionner.

Personne ne sait comment faire cela? Devrais-je utiliser les itinéraires réguliers pour concevoir avec une coutume(admin) mise en page?

29voto

iain Points 11602

Simplement "déplacer" Devise vers l'espace de noms administrateur est faux. Devise utilise des contrôleurs comme Devise::SessionsController et qui ne peuvent pas être "déplacés".

Je crée généralement mes propres contrôleurs et les hérite de Devise:

 class Admin::SessionsController < ::Devise::SessionsController
  layout "admin"
  # the rest is inherited, so it should work
end
 

Et configurez ceci en config/routes.rb :

 devise_for :admins, :controllers => { :sessions => "admin/sessions" }
 

Ou vous pouvez changer la mise en page seulement, en faisant la mise en page un peu plus complexe:

 class ApplicationController < ActionController::Base

  layout :layout

  private

  def layout
    if devise_controller? && devise_mapping.name == :admin
      "admin"
    else
      "application"
    end
  end

end
 

15voto

Jack Chu Points 3795

Que diriez-vous de simplement déplacer la méthode devise_for dans une étendue:

 scope '/admin' do
  devise_for :admins
end
 

Avec l'espace de noms, les contrôleurs essaieront de rechercher un Admin:SessionController qui n'existera pas. Avec la portée, ce n'est pas le cas, donc cela devrait fonctionner.

4voto

Saldan Points 31

Les deux Jack Chu et iain solutions devrait résoudre le problème en plus de la génération de votre point de vue afin de personnaliser la mise en page du formulaire de connexion.

Donc, dans votre config/routes.rb , vous devriez avoir

scope '/subfolder' do
   devise_for :admins, :controllers => { :sessions => "subfolder/sessions" }
end

namespace :subfolder do
  match '/', :to => 'subcontroller#action'
end

Rappelez-vous di créer vos propres contrôleurs pour des séances comme vous le faites déjà. Probablement vous aurez besoin de générer votre point de vue, trop en utilisant rails generate devise:views

Cochez cette moindre doute sur concevoir des tâches.

0voto

Harm de Wit Points 721

En plus de la première solution de la réponse d'iain, j'ai dû générer des vues de devise ou bien il lance une exception de modèle manquant.

générer des vues avec

 rails g devise_views
 

Les vues seront situées dans vues> concevoir. Déplacer les «sessions» de carte créées vers les vues de carte> admin

0voto

Si vous voulez mettre vos vues de devise dans vues / admin / admins / et vos contrôleurs dans controllers / admin / admins /:

votre sessions_controller.rb dans controllers / admin / admins:

 class Admin::Admins::SessionsController < ::Devise::SessionsController
  layout "admin/connection"
end
 

routes.rb:

 namespace :admin do |admin|
    devise_for :admins, :controllers => { :sessions => "admin/admins/sessions" }
end
 

Générer des vues de devise:

 rails g devise:views admin/admins
 

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