Rails でレイアウトファイルを入れ子にする方法です。
大枠のレイアウトがあり、URLによってその中のレイアウトをある程度決定したい場合に使えます。 例えば、 Adminページではページ下部にXXを表示するといったように。
環境
次の環境で試しました。
- Rails 3, 4
方法
標準では、app/views/layouts/application.html.erb
がレイアウトファイルになっています。 今回その中に表示したいレイアウトファイルとして、 app/views/layouts/sub_application.html.haml
を作成するものとします。 最近あったプロジェクトでは、 app/views/something/layouts/application.html.haml
というレイアウトファイルを作ったりしました。
1 2 3 4 5 6 7 |
-content_for :content do %header here is the top of content =yield %footer here is the bottom of content =render templates: 'layouts/application' |
Ruby のバージョンによっては、 render :templates =>'layouts/application'
と書くこともあります。
ここでは、 :content
を定義しています。 そして、 layouts/application
で、 定義した :content
を表示するようにします。
1 2 3 4 5 6 7 8 9 |
<!DOCTYPE html> <html> <head> <ttile></title> </head> <body> <%= content_for?(:content) ? yield(:content) : yield %> </body> </html> |
このようにして、 :content
が定義されている場合には :content
を、 そうでない場合にはこれまでどおり yield
で表示をするようにします。