goo blog サービス終了のお知らせ 

Ruby on Rails フォオオオオオオオオオオオオオ!!

Ruby on Railsの参考書やサイトの写経を行っています。あと他になんかやったこととか書いていくかも

Ruby on Rails レイアウトを入れ子にする

2015-09-09 10:36:00 | レイアウト編
レイアウトは入れ子にすることもできます。
会社全体レイアウトの中に事業所ごとのレイアウトを入れることで、
全体レイアウトを修正する際に
事業所ごとのレイアウトを全て修正するような手間を省くことができます。


じゃけん子どもを用意しましょうね~。
このyajuuchild.html.erbを子レイアウトにします。



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



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



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



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



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




構造としてはちょっと奇妙ですが
子レイアウトから親レイアウトを呼び出し、
親レイアウトから:content、さらに:layoutコンテンツを呼び出して
入れ子のレイアウトを実現しています。


理屈の上では3階層以上のレイアウトを定義することもできます。
ただ管理が困難になるのであんまり深くしないほうが良さそうです。

最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。