Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
104
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

Rails4 で render partial 部分テンプレートに変数を渡す(locals option)を使う時の注意点

Rails4 - render partialで部分テンプレートに変数を渡す方法 - Qiita

をやろうとしてて、こんな風に書いていた。

= render 'shared/item_header', locals: { item: @item }

発生するエラー

undefined local variable or method `item' for 

BetterErrors gem を入れてるとこんな感じで見える

間違っている locals の値の渡し方

image

local_assigns に値が渡ってるので一見良さそうに見えるんだけど・・

正しく指定出来た場合

image

よーく見ると、 local_assigns が間違ってる方は無駄に1段深い。。

原因・解決方法

view で render を記述する時に、わざわざ partial: と書かなくても大丈夫なので、そこを省略した時のオプションの渡し方に問題があった。

参考:
レイアウトとレンダリング | Rails ガイド

正しい書き方

= render partial: 'shared/item_header', locals: { item: @item }

または

= render 'shared/item_header', item: @item

1つ目の partial: オプション名を省略した場合は、 locals: オプション名も使ってはダメ。

locals に渡す変数が1つだけの場合、 中括弧を省略する場合が多い(編集リクエストでのご指摘を反映)

RailsGuideでの注意点記載箇所

レイアウトとレンダリング | Rails ガイド

:layoutなどの追加オプションを渡す場合は、:partialオプションを明示的に指定する必要がある点にもご注意ください。

partial, locals以外のオプションを指定したい場合は、省略できないので注意。

陥っていた状況とビンゴの回答

ruby on rails - Rendering partial with locals in Haml? - Stack Overflow

さすがの StackOverflow
世界中まで広げると、同じ状態に陥ってワタワタしてる初心者と、それに答えてくれる親切な上級者の輪がデカイ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
104
Help us understand the problem. What are the problem?