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

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

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

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

Q&A

解決済

1回答

690閲覧

NoMethodError in Products#index undefined method `round' for nil:NilClass の解決方法

mabauki_bouken

総合スコア7

Ruby on Rails

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

0グッド

0クリップ

投稿2021/05/15 12:35

映画の作品をログインしてレビュー投稿するオリジナルアプリを開発しています。
作品の投稿ボタンを押すと上記のようなエラーが出てしまいます。

問題のソースコード products/index.html.erb

<i class="star-actived rate-<%= product.review_average %>0"></i>ード

レビューの投稿評価の定義がないというメッセージなのでしょうか?
データベースとの関係性とコントローラーの定義がないということなのでしょうか?
回答いただけますとありがたいです。

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

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

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

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

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

maisumakun

2021/05/15 12:51

review_averageはどのように定義されていますか?
mabauki_bouken

2021/05/15 20:47

ご回答ありがとうございます! reviews_controller.rbの以下全文です。 class ReviewsController < RankingController before_action :authenticate_user!, only: :new def new @product = Product.find(params[:product_id]) @review = Review.new end def create Review.create(create_params) redirect_to controller: :products, action: :index end private def create_params params.require(:review).permit(:rate, :review).merge(product_id: params[:product_id], user_id: current_user.id) end end
mabauki_bouken

2021/05/15 20:49

rankinng_controller.rb の全文コードでです。 class ReviewsController < RankingController before_action :authenticate_user!, only: :new def new @product = Product.find(params[:product_id]) @review = Review.new end def create Review.create(create_params) redirect_to controller: :products, action: :index end private def create_params params.require(:review).permit(:rate, :review).merge(product_id: params[:product_id], user_id: current_user.id) end end
mabauki_bouken

2021/05/15 20:49

いつもすみません。よろしくお願いいたします。
maisumakun

2021/05/15 22:20

review_averageの定義が見当たらないのですが。
mabauki_bouken

2021/05/16 01:51

ご回答ありがとうございます。 reviews_controller.rbのコード @review = Review.new が該当コードとはならないのでしょか?初歩的な質問ですみません。
maisumakun

2021/05/16 01:56

ならないです。提示されたコードに「review_average」という単語が登場していないです。
mabauki_bouken

2021/05/16 02:17

ありがとうございます。そうでしたか、全く気付いていませんでした。 私の仮説として、reviews_controller.rb   def new @product = Product.find(params[:product_id]) @review = Review.new 上記@review = Review_average に置き換える形で良いという事でしょうか?
maisumakun

2021/05/16 02:22

> 私の仮説として そもそも、コードを書き換えることを求めているのではないのですが。
mabauki_bouken

2021/05/16 02:28

ありがとうございます。 products/index.html.erb の問題となっているコードを置き換える必要があるということですね? 先ほどの、コントローラーの定義ですが、@review = Review.new に置き換えても何も変わりませんでした。  早速コードをかえてみます。
maisumakun

2021/05/16 02:31 編集

> products/index.html.erb の問題となっているコードを置き換える必要があるということですね? そうも言っていません。review_averageの定義を提示してください(コードを提示する上で、コードを書き換える必要性は皆無です)。
maisumakun

2021/05/16 02:30

(エラーメッセージに「undefined method `round' for nil:NilClass」とでているにもかかわらず、そのroundが入った行が提示されない以上、何も判断できません)
mabauki_bouken

2021/05/16 02:51

他に変えてみたところで、違うエラーが出てしまいおっしゃる通りになってしまいました。 今一度review_avaregeの定義を考えてみたいと思います。  原因追及をしてみます。
maisumakun

2021/05/16 02:54

undefined method `round' for nil:NilClassのメッセージにファイル名や行数などは出ていないのですか?
mabauki_bouken

2021/05/16 03:16

ありがとうございます。アプリのトップページに各作品の平均評価点を出したくて嵌ってしまいました。  現状、該当のソースコードを少し変えています。 <i class="star-actived rate-<%= product.reviews.average(:rate).round %>0"></i> NoMethodError in Products#index その他に出ているエラー文として以下全文です。 undefined method `round' for nil:NilClass app/views/products/index.html.erb:24:in `block in _app_views_products_index_html_erb___462344188239082514_46566060' app/views/products/index.html.erb:15:in `_app_views_products_index_html_erb___462344188239082514_46566060' Request Parameters: None Toggle session dump Toggle env dump Response Headers: None
maisumakun

2021/05/16 03:19

すみません、元のコードと違いすぎてついていけません(review_averageとあったので、そういう名前のメソッドがあるものと解釈していました)。
mabauki_bouken

2021/05/16 04:02

すみませんでした。 こちらの質問の仕方が良くなかったと思います。 'round'メソッドがないということなのかな?と現状は捉えております。
guest

回答1

0

ベストアンサー

エラーの対処としては、まず原因を突き止めることが先決です。

エラーの原因も把握しないまま、闇雲にコードを書き換えるのは、泥沼にハマっていく要因にしかなりません。

投稿2021/05/16 02:33

maisumakun

総合スコア146018

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

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

mabauki_bouken

2021/05/16 08:13

maisumakunさま 度々申し訳ございません。 エラーの原因がわかりました! phpmyadminのreviewテーブルにrateカラムの数値がNULLとなっていました。 そこに数値を入れることで解消できました! 大変お騒がせしました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問