Usando layout (tema) diferente nas views do devise
May 6, 2016
Recentemente precisei usar um tema diferente na tela de login de uma aplicação usando o devise. Por padrão todas as views geradas pelo Rails possuem como layout o application.html.erb
app/views/layouts/application.html.erb
Criando um layout específico
A primeira e mais fácil é simplesmente criar um layout com o nome de devise na pasta das views que siga a mesma lógica definida no application.html.erb
app/views/layouts/devise.html.erb
Com isso, todas as views geradas pelo devise (registrations, sessions, confirmations) usarão especificamente esse layout, permitindo o uso de um tema css, ou de scripts javascript únicos para as views de Login, Logout e etc.
Método no controller
Outra forma é definir um método no application controller para determinar quando um controller do devise está ativo e responder de acordo com isto:
class ApplicationController < ActionController::Base
layout :layout_by_resource
protected
def layout_by_resource
if devise_controller?
"nome_do_layout_para_o_devise"
else
"application"
end
end
end
Definir nas configurações
Outra opção é usar um callback dentro do bloco de configurações no config/application.rb:
config.to_prepare do
Devise::SessionsController.layout "nomedolayout"
end
É sempre bom ressaltar o excelente guia do rails, e a também excelente documentação do devise