投稿されたレビューに対して通報する機能をつけようしたのですが、missing required keys:
というエラーが出てしまいます
Error
1ActionController::UrlGenerationError in Reviews#index 2 No route matches {:action=>"create", :controller=>"reports", 3 :recipe_id=>#<Review id: 1, user_id: 1, recipe_id: 1, content: "aaa", score: 5, created_at: "2020-09-15 14:30:51", updated_at: "2020-09-15 14:30:51">}, 4 missing required keys: [:review_id]
通報機能は、投稿されたレシピにレビューを書き込めるようになっており、そのレビューに対してつけようとしています
Routes
1recipe_review_reports DELETE /recipes/:recipe_id/reviews/:review_id/reports(.:format) reports#destroy 2 POST /recipes/:recipe_id/reviews/:review_id/reports(.:format) reports#create
上記のreview_id
が取得できずにエラーが出ているのではないかと思っていますが、解決方法がわかりません(そもそも、考えている原因があっているかもわかりません)
routes.rb↓
Rails.application.routes.draw do resources :recipes do resource :favorites, only: [:create, :destroy] resources :reviews, only: [:index, :create] do resource :reports, only: [:create, :destroy] end end
reviews\index.html.erb↓
<% @reviews.each do |review| %> <% if current_user.already_reported?(review) %> <%= link_to '通報を取り消す', recipe_review_reports_path(review), method: :delete %> <% else %> <%= link_to '通報する', recipe_review_reports_path(review), method: :post %> <% end %> <% end %>
reports_controller.rb↓
class ReportsController < ApplicationController def create @report = current_user.reports.create(review_id: params[:review_id]) redirect_back(fallback_location: root_path) end def destroy @review = Review.find(params[:review_id]) @report = current_user.reports.find_by(review_id: @review.id) @report.destroy redirect_back(fallback_location: root_path) end end
よろしければ解決方法を教えていただけないでしょうか
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。