アプリ制作時に「ログイン関連(ログイン、新規登録等々)」「管理画面」などなどコントローラー毎にレイアウトを切り替えたいので、色々と探してみました。
##やりたいこと
###コントローラーごとにレイアウトやデザインを別々にしたい
自分の制作したデザインが「ログイン関連」と「管理画面」とで別もののため別々にしたい。
けれども「application.html.erb」しかない、どうしよう。
###コントローラの中でさらに共通部分をまとめたい(共通パーツ化したい)
コピーライトやヘッダーフッターなどなど各々使い回せたらいいな、と思ってみたり。
##解決方法
###コントローラーごとにレイアウトやデザインを別けたい
方法は単純明快で、/app/views/layouts/
以下にコントローラー名.html.erb
ファイルを作成して、その中で記述すれば自動で呼び出してくれる。
あとは「application.html.erb」と同じように使えばOK。
###コントローラーの中でさらに共通パーツ化したい
まずは/app/views/
ディレクトリ以下にアンダーバーを冒頭に入れたファイル名で作成する。(例:_hoge.html.erb)
どうやら/app/views/
以下に「shared」ディレクトリを挟んでまとめる場合が多いらしいので、やらない理由は特にないので合わせてみる。(将来実務経験する際は注目してみよう。)
呼び出したい部分テンプレートの場所:/app/views/shared/_hoge.html.erb
<%= render partial: 'shared/hoge' %>
拡張子はサヨナラバイバイでOK。
この記述を読み込ませたい場所に記述すれば成功。
インクルードさせる、みたいな感覚。
「partial:」は省略可能だが、テンプレート内で変数を使う場合は必須。
##まとめ
色々調べていたらまだまだ応用パターンがあるみたい。
今後ぶち当たったら参考にしてみよう。
##参考サイト
コントローラやアクション毎に使用するレイアウトを切り替える - Ruby on Rails入門
【Rails入門】yieldとcontent_forを使ってページ毎にタイトルを変更