やろうとしたこと
- Railsの公開ページで共通して適用するヘッダと、管理者ページで適用するヘッダを
layoutで切り替えようとした
環境
- ruby 2.3.3
- Rails 5.2.0
layout周りの実装
- 公開ページは
application_controller.rbを継承し管理者ページはadmin/apllication_controller.rbを継承したコントローラで制御 - それぞれの
application_controller.rbコントローラで適用するlayoutファイルを切り替え
公開画面
layout/application.html.slimを読み込む
layout 'application'
管理画面
layout/admin/application.html.slimを読み込む
layout 'admin/application'
つまづいたこと
- ログイン後とログイン前の画面でレイアウトが切り替わらないことがある
- 不定期に発生する
- キャッシュ周りの問題なのかも
- 今回は問題なかったけどログイン後のユーザでヘッダを切り替えようとする実装があると、エラーを吐く
対処方法
-
admin/apllication_controller.rbをadmin/base_controller.rbに名前を変更 - クラス名も
Admin::ApplicationControllerからAdmin::BaseControllerに変更 -
admin以下のコントローラの継承をAdmin::BaseControllerに変更 -
base_controller.rbから呼び出すlayoutをadmin/base.html.slimに変更
思うと今回はゴリ押しにしか見えないけど、こんな感じにコントローラの名前を変えたらレイアウトが反映されないことがなくなった
明らかにベストプラクティスじゃないのでもっとかっこよく記述したい