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

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

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

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

Q&A

解決済

1回答

2110閲覧

通報機能を実装したいが、ActionController::UrlGenerationError が出る

baby_wing

総合スコア11

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/26 15:13

編集2020/09/26 15:23

投稿されたレビューに対して通報する機能をつけようしたのですが、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

よろしければ解決方法を教えていただけないでしょうか

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

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

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

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

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

guest

回答1

0

自己解決

reviews\index.html.erbを

<% if current_user.already_reported?(review) %> <%= link_to '通報を取り消す', recipe_review_reports_path(review, @recipe.id), method: :delete %> <% else %> <%= link_to '通報する', recipe_review_reports_path(review, @recipe.id), method: :post %> <% end %>

とすることで解決しました

投稿2020/10/01 16:19

baby_wing

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問