部分テンプレートとは
ビューファイルの一部を別のファイルに切り出しテンプレート化すること。
これにより、共通パーツや繰り返し表示するパーツを無駄なく作成することができる。
部分テンプレートの使い方
= render partial: 'shared/side_bar'
= render partial: "部分テンプレート名"
この場合、
shared
の中にある部分テンプレート _side_bar.html.haml
を呼び出すことができる。
インスタンスを渡す場合
単数形のインスタンスを渡す場合
= render partial: 'groups/group', locals: { group: @group }
= render partial: '部分テンプレート名', locals: { 変数名: 値 }
この場合、 groups
の中にある部分テンプレート _group.html.haml
が呼び出され、
インスタンス変数@group
の値を持った 変数 group
がこのテンプレート内で使用できる。
= render 'groups/group', group: @group
partial
と local
は省略可。どちらかのみの省略も可。
= render @group
オブジェクトの インスタンス変数
と 部分テンプレート
が 同じ名前
のとき。
これだけで上記と同じ処理になる。
※ この場合、groupsコントローラー
のインスタンスをオブジェクトとしているため、
読み込むテンプレートは views/groups
の中に配置する。
複数形のインスタンスを渡す場合
「一つの記事項目をテンプレート化し、それを繰り返し表示することで一覧を表示する」
のような繰り返し処理に便利な書き方。
= render partial: 'groups/group', collection: @groups
collection
オプションを使うことでeachを使用せずに書くことができる。
この場合、
@groups
の中の 個別のインスタンス
が 部分テンプレート内
の 変数 group
として使用できる。
= render 'groups/group', groups: @groups
= render @groups
複数形の場合、
コレクションの中の 個別のインスタンス
が 部分テンプレートに呼ばれる変数
となるため、
each文を使用せずに繰り返しの処理ができる。