Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing devise default layouts

Tags:

I'm trying to get devise to display a different layout template from the defaults for certain aspects.

I have this working when the user goes to the login page, but I need to display a different layout for sign up, forgotten password, and reset.

This is the current code in my application controller:

layout :layout

  private
  def layout
    # only turn it off for login pages:
    is_a?(Devise::SessionsController) ? "login" : "application"
    # or turn layout off for every devise controller:
    #devise_controller? && "application"
  end
like image 225
Boss Nass Avatar asked Jun 18 '12 11:06

Boss Nass


2 Answers

If you name your alternate layout devise.html.erb, then the gem's controllers will naturally use it, without needing to be asked. Saves some code.

like image 89
stephenmurdoch Avatar answered Oct 23 '22 17:10

stephenmurdoch


Add this lines of code to your application.rb:

config.to_prepare do
    Devise::SessionsController.layout "your_layout_name"
    Devise::RegistrationsController.layout "your_layout_name"
    Devise::ConfirmationsController.layout "your_layout_name"
    Devise::UnlocksController.layout "your_layout_name"
    Devise::PasswordsController.layout "your_layout_name"
end

If you want the same layout for all Devise views, except for when the user is editing its data, you could have something like this:

config.to_prepare do
  Devise::SessionsController.layout "your_layout_name"
  Devise::RegistrationsController.layout proc{ |controller| user_signed_in? ? "application" : "your_layout_name" }
  Devise::ConfirmationsController.layout "your_layout_name"
  Devise::UnlocksController.layout "your_layout_name"            
  Devise::PasswordsController.layout "your_layout_name"        
end

For more information you can read this article

like image 34
zolter Avatar answered Oct 23 '22 17:10

zolter