LoginSignup
5
7

More than 3 years have passed since last update.

hamlでの部分テンプレートの呼び出し方の種類(省略形含む)

Last updated at Posted at 2020-01-02

部分テンプレートとは

ビューファイルの一部を別のファイルに切り出しテンプレート化すること。
これにより、共通パーツや繰り返し表示するパーツを無駄なく作成することができる。

部分テンプレートの使い方

app/views/messages/index.html.haml
  = render partial: 'shared/side_bar'
説明
  = render partial: "部分テンプレート名"

この場合、
shared の中にある部分テンプレート _side_bar.html.haml を呼び出すことができる。

インスタンスを渡す場合

単数形のインスタンスを渡す場合

index.html.haml
  = render partial: 'groups/group', locals: { group: @group }
説明
  = render partial: '部分テンプレート名', locals: { 変数名:  }

この場合、 groups の中にある部分テンプレート _group.html.haml が呼び出され、
インスタンス変数@group の値を持った 変数 group がこのテンプレート内で使用できる。

省略形
  = render 'groups/group', group: @group

partiallocal は省略可。どちらかのみの省略も可。

さらに省略
  = render @group

オブジェクトの インスタンス変数部分テンプレート同じ名前 のとき。
これだけで上記と同じ処理になる。
※ この場合、groupsコントローラー のインスタンスをオブジェクトとしているため、
 読み込むテンプレートは views/groups の中に配置する。

複数形のインスタンスを渡す場合

「一つの記事項目をテンプレート化し、それを繰り返し表示することで一覧を表示する」
のような繰り返し処理に便利な書き方。

index.html.haml
  = render partial: 'groups/group', collection: @groups

collectionオプションを使うことでeachを使用せずに書くことができる。
この場合、
@groups の中の 個別のインスタンス部分テンプレート内変数 group として使用できる。

省略形
  = render 'groups/group', groups: @groups
さらに省略
  = render @groups

複数形の場合、
コレクションの中の 個別のインスタンス部分テンプレートに呼ばれる変数 となるため、
each文を使用せずに繰り返しの処理ができる。

参考

[Rails] 部分テンプレート使用時のrenderの書き方

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7