部分テンプレートにインスタンス変数を渡すときに、renderの書き方がいくつかあって迷ったのでまとめてみました。
versionRails 5.0.2
こちらのサイトを参照しました。
単数形のインスタンスを渡す場合
- 基本形
= render partial: 'groups/group', locals: { group: @group }
groupsフォルダ内の_group.hamlを呼び出します。
@groupを部分テンプレート内で変数groupとして使用します。
- 省略形
= render 'groups/group', group: @group
partialとlocalは省略可。どちらかのみの省略も可でした。
= render partial: 'groups/group', object: @group
部分テンプレートと同じ名前の変数はオブジェクトとして渡すことも可能。
この場合、partialは省略不可でした。
- さらに省略形
= render @group
オブジェクトのインスタンス変数と部分テンプレートが同じ名前のとき。
これだけで上記と同じ処理になります。
※この場合、groupsコントローラーのインスタンスをオブジェクトとしているため、'_group.haml'は'views/groups'の中に置かなくてはなりません。
複数形のインスタンスを渡す場合
- 省略形
= render 'groups/group', groups: @groups
単数形の時と同様に、@groupsを渡します。
= render partial: 'groups/group', collection: @groups
複数形の時はオブジェクトではなく、コレクションになります。
- さらに省略形
= render @groups
複数形の時もこれで'groups/_group.haml'を呼べます。
また、複数形の場合、コレクションの中の個別のインスタンスが部分テンプレートに呼ばれる変数となるため、each文を使用せずに繰り返しの処理ができます。
この場合、@groupsの中の個別のインスタンスが、部分テンプレート内の変数groupとして使用できます。
以上、ご指摘等ありましたらコメントお願いします!