レイアウトは入れ子にすることもできます。
会社全体レイアウトの中に事業所ごとのレイアウトを入れることで、
全体レイアウトを修正する際に
事業所ごとのレイアウトを全て修正するような手間を省くことができます。
じゃけん子どもを用意しましょうね~。
このyajuuchild.html.erbを子レイアウトにします。

前回で使ったcontent_forメソッドで子レイアウトを定義します。
そしてその中でyieldを配置してメインテンプレートを埋め込み、
一番最後の行のrenderメソッドのtemplateオプションを利用して、
明示的に親レイアウト「application.html.erb」を呼び出します。

親レイアウトも記述を加えます。
コンテンツが存在するかどうか判定するcontent_for?で
:contentが存在すれば:content、存在しなければメインテンプレートを呼び出すようにします。
こうすることで子レイアウトをネストしていないページには影響は出ないようにします。

次にコントローラを変更します。
renderメソッドのlayoutオプションで子レイアウトを呼び出します。

そして最後にviewでメインテンプレート内のコンテンツを記述します。
書いている私自身がわかりやすくするために
コントローラーで設定したメッセージを表示するだけにします。

ブラウザで表示するとこんな感じです。
親レイアウトと子レイアウトが同時に表示されます。

構造としてはちょっと奇妙ですが
子レイアウトから親レイアウトを呼び出し、
親レイアウトから:content、さらに:layoutコンテンツを呼び出して
入れ子のレイアウトを実現しています。
理屈の上では3階層以上のレイアウトを定義することもできます。
ただ管理が困難になるのであんまり深くしないほうが良さそうです。
会社全体レイアウトの中に事業所ごとのレイアウトを入れることで、
全体レイアウトを修正する際に
事業所ごとのレイアウトを全て修正するような手間を省くことができます。
じゃけん子どもを用意しましょうね~。
このyajuuchild.html.erbを子レイアウトにします。

前回で使ったcontent_forメソッドで子レイアウトを定義します。
そしてその中でyieldを配置してメインテンプレートを埋め込み、
一番最後の行のrenderメソッドのtemplateオプションを利用して、
明示的に親レイアウト「application.html.erb」を呼び出します。

親レイアウトも記述を加えます。
コンテンツが存在するかどうか判定するcontent_for?で
:contentが存在すれば:content、存在しなければメインテンプレートを呼び出すようにします。
こうすることで子レイアウトをネストしていないページには影響は出ないようにします。

次にコントローラを変更します。
renderメソッドのlayoutオプションで子レイアウトを呼び出します。

そして最後にviewでメインテンプレート内のコンテンツを記述します。
コントローラーで設定したメッセージを表示するだけにします。

ブラウザで表示するとこんな感じです。
親レイアウトと子レイアウトが同時に表示されます。

構造としてはちょっと奇妙ですが
子レイアウトから親レイアウトを呼び出し、
親レイアウトから:content、さらに:layoutコンテンツを呼び出して
入れ子のレイアウトを実現しています。
理屈の上では3階層以上のレイアウトを定義することもできます。
ただ管理が困難になるのであんまり深くしないほうが良さそうです。
※コメント投稿者のブログIDはブログ作成者のみに通知されます