LoginSignup
2
3

More than 3 years have passed since last update.

【Rails】コントローラーごとにレイアウトを変更する方法

Last updated at Posted at 2019-10-07

アプリ制作時に「ログイン関連(ログイン、新規登録等々)」「管理画面」などなどコントローラー毎にレイアウトを切り替えたいので、色々と探してみました。

やりたいこと

コントローラーごとにレイアウトやデザインを別々にしたい

自分の制作したデザインが「ログイン関連」と「管理画面」とで別もののため別々にしたい。
けれども「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

index.html.erb
<%= render partial: 'shared/hoge' %>

拡張子はサヨナラバイバイでOK。

この記述を読み込ませたい場所に記述すれば成功。
インクルードさせる、みたいな感覚。
「partial:」は省略可能だが、テンプレート内で変数を使う場合は必須。

まとめ

色々調べていたらまだまだ応用パターンがあるみたい。
今後ぶち当たったら参考にしてみよう。

参考サイト

コントローラやアクション毎に使用するレイアウトを切り替える - Ruby on Rails入門

【Rails入門】yieldとcontent_forを使ってページ毎にタイトルを変更

部分テンプレート - Ruby on Rails入門

[Rails] partialが自身からの相対パスで他partailを参照する場合の注意 - Qiita

【Rails】部分テンプレートの使い方を徹底解説! | ピカわか! - ピカ1わかりやすいプログラミング用語サイト

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3