Rails4 - render partialで部分テンプレートに変数を渡す方法 - Qiita
をやろうとしてて、こんな風に書いていた。
= render 'shared/item_header', locals: { item: @item }
発生するエラー
undefined local variable or method `item' for
BetterErrors gem を入れてるとこんな感じで見える
間違っている locals の値の渡し方
local_assigns に値が渡ってるので一見良さそうに見えるんだけど・・
正しく指定出来た場合
よーく見ると、 local_assigns が間違ってる方は無駄に1段深い。。
原因・解決方法
view で render を記述する時に、わざわざ partial:
と書かなくても大丈夫なので、そこを省略した時のオプションの渡し方に問題があった。
正しい書き方
= render partial: 'shared/item_header', locals: { item: @item }
または
= render 'shared/item_header', item: @item
1つ目の partial:
オプション名を省略した場合は、 locals:
オプション名も使ってはダメ。
※ locals
に渡す変数が1つだけの場合、 中括弧を省略する場合が多い(編集リクエストでのご指摘を反映)
RailsGuideでの注意点記載箇所
:layoutなどの追加オプションを渡す場合は、:partialオプションを明示的に指定する必要がある点にもご注意ください。
partial, locals以外のオプションを指定したい場合は、省略できないので注意。
陥っていた状況とビンゴの回答
ruby on rails - Rendering partial with locals in Haml? - Stack Overflow
さすがの StackOverflow
世界中まで広げると、同じ状態に陥ってワタワタしてる初心者と、それに答えてくれる親切な上級者の輪がデカイ。