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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

Q&A

1回答

747閲覧

users_showページにて@productを定義したい

yastinbieber

総合スコア49

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/16 04:59

編集2020/04/16 05:20

前提・実現したいこと

users_showページにて@productを定義したい

users_showページにて、
そのユーザーの書いたレビューを一覧で反映させたいのですが、@productを定義できないためか本の名前を反映させることができずにいます。
(赤枠のところこのユーザーのレビューした本の名前を反映させたい)
イメージ説明

発生している問題・エラーメッセージ

users_showページにproductテーブルで定義している@productを定義したいのですが、
カラムがないため?エラーになってしまいます。

イメージ説明

該当のソースコード

##users_controller class UsersController < ApplicationController def show @user = User.find(params[:id]) @nickname = @user.nickname @users = current_user.reviews.page(params[:page]).per(3) end end

試したこと

@product = Product.find(params[:id]) や @product = Product.find(params[:product_id])

など試しましたが両方エラーが出てしまいます。

どなたかuserテーブルにおける@productを挿入する方法をお教えいただけますと幸いです。

■追記

##users_show.html.erb <div class="contents-box"> <div class="container-left"> <div class="container-left-register"> <h3>プロフィール</h3> </div> <div class="container-search-result"> <div class="container-search-result-box-pf"> <div class="container-search-result-box-left"> <% if @user.image.attached? %> <%= image_tag @user.image %> <% end %> </div> <div class="container-search-result-box-right"> <h2>@<%= @nickname %> <% if current_user.id == @user.id %> <%= link_to "プロフィール編集", edit_user_path(current_user), {:class => "btn3" } %> <% end %> </h2> <p><%= simple_format(@user.selfintroduction) %></p> </div> </div> </div> <div class="container-left-register"> <h3>レビュー</h3> </div> <% @users.each do |review| %> <div class="review-detail"> <div class="review-detail-item"> <div class="username"> <p class="text-small"> <% if review.comments.present? %> <span>レビューに対しての平均評価:</span> <span class="rating-star"> <i class="star-actived rate-<%= review.comments.average(:rate).round %>0"></i> </span> <% else %> <span>レビューに対しての平均評価:</span> <span class="rating-star"> <i class="star-actived rate-0"></i> </span> <% end %> </p> </div> <div class="write-review"> <h3><span class="product-btn">title:booknameを入れたい</span></h3><!--titleを入れたい--> </div> <div class="review-1"> <br><p><%= truncate(review.review, length: 10) do %></p> <% end %> </div> </div> <%= link_to 'レビュー詳細', "", method: :get, class: "right-btn-review-detail" %> <!--routingがわからない--> </div> <% end %> <div class="JIP"> <%= paginate(@users) %> </div> </div> <div class="container-right"> <%= form_tag('/products/search', method: :get) do %> <input id="sbox" name="keyword" type="text" placeholder="キーワードを入力" /> <input id="sbtn" type="submit" value="検索" > <% end %> <form accept-charset="utf-8" action="/" class="js-search-submit" method="get"> </form> <br> <%= link_to "書籍を検索する", "/products/search", class: "right-btn" %> <%= link_to "書籍を登録する", "/products/new", class: "right-btn" %> <% if user_signed_in? %> <%= link_to "マイページ", user_path(current_user), class: "right-btn" %> <% end %> <% if current_user.id == @user.id %> <%= link_to "プロフィール編集", edit_user_path(current_user), class: "right-btn" %> <% end %> </div> </div>

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

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

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

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

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

maisumakun

2020/04/16 05:08 編集

ビュー側はどのように書きましたか?
yastinbieber

2020/04/16 05:21

お返事ありがとうございます。 users_show画面を追記させていただきました。 文中、レビューした本の名前を反映させたいのですが<%= product.bookname %>または<%= review,product.bookname %>共にエラーが出てしまっております。 またそのレビューの詳細に移る際に@productが定義できないためか遷移できない状況です。 ご質問いただいた内容に関してですが、 レビューは1つからだけでなく、書籍の数だけできるような仕様になっております。
guest

回答1

0

users_showページにて@productを定義したい

各ユーザーは1つの製品しかレビューできないのでしょうか。そうでなければ、前提が誤っています

投稿2020/04/16 05:10

maisumakun

総合スコア146018

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

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

maisumakun

2020/04/16 05:15

「必ず1つ」という前提でないなら、「@productに1つ取ってくる」という考え自体が適切ではありません。
maisumakun

2020/04/16 05:23

「review,product.bookname」ではなく「review.product.bookname」ではないでしょうか。
yastinbieber

2020/04/16 08:00

すみません。上記書き間違えです。 <%= review.product.bookname %>と記載してエラーが出てしまいます。
maisumakun

2020/04/16 08:00

どのようなエラーが出ましたか?
yastinbieber

2020/04/16 08:08

NoMethodError in Users#show Showing /home/ec2-user/environment/booksreview/app/views/users/show.html.erb where line #45 raised: undefined method `bookname' for nil:NilClass このようなエラーが出てしまいます。
maisumakun

2020/04/16 08:11

ここまで進んでから言うべきことではないとは思いますが、どんなモデルがどのようなリレーションで結びついているのかを整理してください(情報不足で、どこからproductをたどっていいのかもわからないです。)。
yastinbieber

2020/04/16 16:06

そうですよね。 勉強不足で大変申し訳ないのですが、どうして上記のような形でエラーが出てしまうのか見当がつきません… あれから変数だったり、モデルについてなど調べてみておりますがよくわかっていない状況です。 ちなみにモデルに関しては、 ■user.rb has_many :products ■product.rb belongs_to :user と定義はしております。 がしかしエラーが出てしまっております。 非常に質の低い質問となってしまい申し訳ないですが、 どうしてエラーが出てしまうのか。またどのように対処すべきかご教示いただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問