Другой способ применить пользовательский макет для действия заключается в следующем.
Согласно Как: создать пользовательские макеты"Вы также можете установить макет для определенных контроллеров Devise, используя обратный вызов в config / environment.rb (rails 2) или config / application.rb (rails 3) Это должно быть сделано в обратном вызове to_prepare, потому что он выполняется один раз в производстве и перед каждым запросом в разработке. "
config.to_prepare do
Devise::SessionsController.layout "devise"
Devise::RegistrationsController.layout proc{ |controller| user_signed_in? ? "application" : "devise" }
Devise::ConfirmationsController.layout "devise"
Devise::UnlocksController.layout "devise"
Devise::PasswordsController.layout "devise"
end
Обычно разметка макета проводится между страницами за входом в систему и страницами, которые не требуют аутентификации, поэтому вышеуказанный подход работает большую часть времени. Но я также экспериментировал с использованием action_name
помощника, чтобы установить макет для определенного действия, и он работал как шарм:
config.to_prepare do
Devise::SessionsController.layout proc{ |controller| action_name == 'new' ? "devise" : "application" }
end
Я думаю, что это лучший и встроенный способ изменения макета на основе разработки контроллера / действия вместо создания помощника в ApplicationController.