120
104

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-09-04

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
世界中まで広げると、同じ状態に陥ってワタワタしてる初心者と、それに答えてくれる親切な上級者の輪がデカイ。

120
104
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
120
104

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?