[Rails] Devise如何自訂Layout
有三種方式
- 在 DeviseController 定義layout
- 在 ApplicationController 定義layout
- 在 config (config/application.rb) 定義layout (推薦此種)
第一種
需要自己寫一個User::RegistrationsController來override
class User::RegistrationsController < Devise::RegistrationsController
layout 'dashboard', only: [:edit]
def edit
super
end
end
第二種
用判斷的方式處理
class ApplicationController < ActionController::Base
layout :layout_by_resource
protected
def layout_by_resource
if devise_controller?
"layout_name_for_devise"
else
"application"
end
end
end
第三種 (個人認為這種最方便使用)
這段要放在end之後,其實原本應該放application.rb,這邊是為了把devise統一放在一起
## [path] config/initializers/devise.rb
Rails.application.config.to_prepare do
Devise::SessionsController.layout proc { |controller| user_signed_in? ? "admin" : "application" }
Devise::RegistrationsController.layout proc { |controller| user_signed_in? ? "admin" : "application" }
Devise::ConfirmationsController.layout "admin"
Devise::UnlocksController.layout "admin"
Devise::PasswordsController.layout "admin"
end
留言