Rails
haml
初心者
RubyOnRails
Rails5

render先に変数が上手く渡らないときに確認すること

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の書き方
書籍 Ruby on Rails 5アプリケーションプログラミング