映画の作品をログインしてレビュー投稿するオリジナルアプリを開発しています。
作品の投稿ボタンを押すと上記のようなエラーが出てしまいます。
問題のソースコード products/index.html.erb
<i class="star-actived rate-<%= product.review_average %>0"></i>ード
レビューの投稿評価の定義がないというメッセージなのでしょうか?
データベースとの関係性とコントローラーの定義がないということなのでしょうか?
回答いただけますとありがたいです。
review_averageはどのように定義されていますか?
ご回答ありがとうございます!
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
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
いつもすみません。よろしくお願いいたします。
review_averageの定義が見当たらないのですが。
ご回答ありがとうございます。
reviews_controller.rbのコード
@review = Review.new
が該当コードとはならないのでしょか?初歩的な質問ですみません。
ならないです。提示されたコードに「review_average」という単語が登場していないです。
ありがとうございます。そうでしたか、全く気付いていませんでした。
私の仮説として、reviews_controller.rb
def new
@product = Product.find(params[:product_id])
@review = Review.new
上記@review = Review_average
に置き換える形で良いという事でしょうか?
> 私の仮説として
そもそも、コードを書き換えることを求めているのではないのですが。
ありがとうございます。
products/index.html.erb
の問題となっているコードを置き換える必要があるということですね?
先ほどの、コントローラーの定義ですが、@review = Review.new
に置き換えても何も変わりませんでした。
早速コードをかえてみます。
> products/index.html.erb
の問題となっているコードを置き換える必要があるということですね?
そうも言っていません。review_averageの定義を提示してください(コードを提示する上で、コードを書き換える必要性は皆無です)。
(エラーメッセージに「undefined method `round' for nil:NilClass」とでているにもかかわらず、そのroundが入った行が提示されない以上、何も判断できません)
他に変えてみたところで、違うエラーが出てしまいおっしゃる通りになってしまいました。
今一度review_avaregeの定義を考えてみたいと思います。
原因追及をしてみます。
undefined method `round' for nil:NilClassのメッセージにファイル名や行数などは出ていないのですか?
ありがとうございます。アプリのトップページに各作品の平均評価点を出したくて嵌ってしまいました。
現状、該当のソースコードを少し変えています。
<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
長々とすみません。
すみません、元のコードと違いすぎてついていけません(review_averageとあったので、そういう名前のメソッドがあるものと解釈していました)。
すみませんでした。
こちらの質問の仕方が良くなかったと思います。
'round'メソッドがないということなのかな?と現状は捉えております。
回答1件
あなたの回答
tips
プレビュー