render時の変数はパラメーター渡しが基本
パラメーターを指定することで部分テンプレートの使い回しができます
index.html
= render 'template', group: @group
= render 'template', group: @gp
= render 'template', group: data
collectionで渡すと勝手にeachして、asで指定した変数に入れてくれます
変数名の指定はシンボルでも""でも可
index.haml
= render partial: 'template', collection: @group, as: :group
= render partial: 'template', collection: @group, as: 'group'
= render partial: 'template', collection: @gp, as: :group
ちなみにcollectionは何も指定しないと、eachされた変数は参照先テンプレートの名前になります
index.haml
= render partial: 'template', collection: @groups
_template.haml
%p #{template.name}
以下renderで変数が渡らなかったとき、意外とその原因が潜む場所が多いなと思ったのでメモ
## 部分テンプレート名とインスタンス変数が違う
localsとobjectは何も指定しないと部分テンプレート名の変数に入ります
collectionの場合はeachされたものが部分テンプレート名の変数に入ります
index.haml
= render partial: 'groups', collection: @groups
= render partial: 'groups', locals: @groups
= render partial: 'groups', object: @groups
_groups.haml
%p #{group.name}
この場合であれば#{groups.name}
にする、もしくはファイル名を_group.haml
にする
partialだけを省略していないか?
locals:
object:
collection:
はpartial:
とセットで使う
あるいは、@変数の中身が1つの場合は本記事冒頭に記載の両方省略形にする
index.haml
= render partial: 'groups/group', locals: { group: @group }
= render partial: 'groups/group', object: @groups
= render partial: 'groups/group', collection: @groups
## `locals` `object`で配列を渡した時はeachしないといけない 勝手にeachしてくれるのはcollectionだけです localsとobjectで渡された変数は配列のままなので参照先でeachしないといけない
index.haml
= render partial: 'template', locals: {group: @groups}
= render partial: 'template', object: @groups, as: :group
_template.haml
- group.each do |g|
%p #{g.name}
なので配列の時はcollectionで渡す
@変数だけで渡している場合
参照先は同じディレクト下の@変数単数形の部分テンプレート
@変数はeachされて部分テンプレート名に入る
groups/index.haml
= render @groups
groups/_group.haml
%p #{group.name}
## 同じ部分テンプレートを別の場所でもrenderしていないか? どこを修正してもエラーがなおらない!! そんな時は別の場所で同じ部分テンプレートをrenderしている可能性あり
index.haml
.contents
%h1 人気のグループ
= render partial: 'sample', collection: @groups, as: :group
= render 'sample2'
= render 'sample3'
.contents
%h1 人気のアーティスト
= render 'sample' ◀︎◀︎◀︎◀︎ ここだ〜〜〜!!
#### 参考文献 Qiita [[Rails] 部分テンプレート使用時のrenderの書き方](https://qiita.com/kojiro3/items/4ce52494a4e69bc443a2) 書籍 [Ruby on Rails 5アプリケーションプログラミング](https://www.amazon.co.jp/Ruby-Rails-5%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4774188832)