web-dev-qa-db-fra.com

Rails & Devise: Comment rendre la page de connexion sans mise en page?

Je sais que c'est probablement une question simple, mais j'essaie toujours de comprendre Devise out ...

Je veux render :layout => false sur ma page de connexion; comment puis-je le faire avec Devise ?

55
neezer

Vous pouvez sous-classer le contrôleur et configurer le routeur pour l'utiliser:

class SessionsController < Devise::SessionsController
  layout false
end

Et en config/routes.rb:

devise_for :users, :controllers => { :sessions => "sessions" }

Vous devez également déplacer les vues de session sur ce contrôleur.

OU créer une méthode dans app/controllers/application_controller.rb:

class ApplicationController < ActionController::Base

  layout :layout

  private

  def layout
    # only turn it off for login pages:
    is_a?(Devise::SessionsController) ? false : "application"
    # or turn layout off for every devise controller:
    devise_controller? && "application"
  end

end
103
iain

Vous pouvez également créer un fichier sessions.html.erb dans app/views/layouts/devise. Cette disposition sera ensuite utilisée uniquement pour l'écran de connexion.

36
Paul Raupach

En utilisant le devise_controller? aide, vous pouvez déterminer quand un contrôleur Devise est actif et répondre en conséquence. Pour que Devise utilise une mise en page distincte pour le reste de votre application, vous pouvez faire quelque chose comme ceci:

class ApplicationController < ActionController::Base
  layout :layout_by_resource

  protected

  def layout_by_resource
    if devise_controller?
      "devise"
    else
      "application"
    end
  end
end

créer un fichier devise.html.erb dans vos vues/présentations

Donc, si c'est un contrôleur de périphérique qui rendra la disposition du dispositif, sinon la disposition de l'application

de: https://github.com/plataformatec/devise/wiki/How-To:-Create-custom-layouts

8
msroot