質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2035閲覧

[Rails] render partialで変数を渡せない

BLACK13

総合スコア17

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/02/07 08:27

背景・やりたいこと

Railsでアプリを作成しており、複数のViewで共有して使用するユーザーの情報(画像・ユーザー情報のリンク)をPartialとして作成し、各Viewから呼び出して表示したいと思っています。呼び出し元(view)と呼び出し先(Partial)に以下を書いています。

[show.html.erb]

rails

1<!-- partialの呼び出し --> 2 3<%= render "users/user_panel", user: @challenge.user %>

[_user_panel.html.erb]

rails

1<!-- partialの記載内容 --> 2 3 <%= image_tag user.image.url, :alt => "avatar", :class => "image-round", size: 40 if user.image? %> 4 <span class="userinfo"><%= link_to user.name, user %></span>

困っていること

実際に動かしてみると以下のエラーが発生してpartialが表示されません(呼び出しはされているようですが変数userがうまくわたっていないように見えます)

rails

1<!-- エラー出力 --> 2ActionView::Template::Error (undefined local variable or method `user' for #<#<Class:0x000000000fbc0f20>:0x000000000fbd31c0> 3Did you mean? super): 4 1: 5 2: <%= image_tag user.image.url, :alt => "avatar", :class => "image-round", size: 40 if user.image? %> 6 3: <span class="userinfo"><%= link_to user.name, user %></span>

試したこと

. Webで検索してみると同様の事象が発生した際に多い原因として,

[renderする際に「= render partial: 'パーシャルファイル', locals: { Partialで使用する変数: 呼び出し元のローカル変数 }」と記載するか「= render 'shared/item_header', Partialで使用する変数: 呼び出し元のローカル変数 」と省略化して記載するかのどちらかなのに、半端にpartial:, locals:のどちらかを指定している・・・]

という記事を多く見つけました。念の為 ’render partial: 'パーシャルファイル', locals: {…’ の書き方も試してみましたが、やはり上記と同様のエラーです

コマンドラインで実行してみましたが、引数を設定している箇所のローカル変数@challenge.userについては値のセットは問題なくできているように見えます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siruku6

2020/02/08 20:39 編集

念のため確認です。 以下の記述に直してもエラー文/エラー出力は全く同一だったという認識で合っていますか? [show.html.erb] <%= render partial: "users/user_panel", locals: { user: @challenge.user } %> もしそうである場合、念のため試していただきたいのは、 _user_panel.html.erb 内に記述されている変数 user を、全て @challenge.user に書き換えるとどうなるか、です。 もし@challenge.user に正しくデータが入っていれば、これで動きはすると思います(推奨されない書き方ですので、あくまで検証のためだけに書く形になります。)
guest

回答1

0

自己解決

解決しました。原因としてはshow.html.erb内で呼び出している別のパーシャルにも _user_panel.html.erbを呼び出している箇所があり、そちらでの呼び出し部分の記載が誤っていました。ですので、```rails
<%= render "users/user_panel", user: @challenge.user %>

の記述は問題ないと思います。初心者ながら凡ミスでお恥ずかしい限りです。失礼しました。 siruku6様>コメント・アドバイス、大変有難うございました。ご丁寧に助かります

投稿2020/02/10 01:08

BLACK13

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問