部分テンプレートとは
ビューファイルの一部を別のファイルに切り出しテンプレート化すること。
これにより、共通パーツや繰り返し表示するパーツを無駄なく作成することができる。
部分テンプレートの使い方
= 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文を使用せずに繰り返しの処理ができる。