Boss Nass
Boss Nass

Reputation: 3522

Changing devise default layouts

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

Upvotes: 32

Views: 28154

Answers (3)

stephenmurdoch
stephenmurdoch

Reputation: 34613

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.

Upvotes: 82

zolter
zolter

Reputation: 7160

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

Upvotes: 48

simo
simo

Reputation: 24560

You don't need to handle the layouts by your self, just do:

rails generate devise:views

Then, look at devise folder at views folder, you will see all the forms you need to customize

Upvotes: -3

Related Questions