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
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.
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
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