前提・実現したいこと
ruby on railsにてレビューアプリを作成しています。
エラー文を読むと「redirect_to(...)andreturn」のような記述をしてくださいと記述されていますがその記述はしてあります。
発生している問題・エラーメッセージ
AbstractController::DoubleRenderError in ReviewsController#create Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return". Extracted source (around line #17): def create @reviews = Review.new(review_params) render json:{ reviews: @reviews } if @reviews.save redirect_to root_path else render :new and return end end
該当のソースコード
ruby
1class ReviewsController < ApplicationController 2 3 def index 4 @reviews = Review.all 5 end 6 7 def new 8 @reviews = Review.new 9 end 10 11 def create 12 @reviews = Review.new(review_params) 13 render json:{ reviews: @reviews } 14 if @reviews.save 15 redirect_to root_path 16 else 17 render :new and return 18 end 19 end 20 21 22 private 23 24 def redirect_root 25 redirect_to root_path unless current_user.id == @reviews.user_id 26 end 27 28 def review_params 29 params.require(:reviews).permit(:image,:title,:category_id,:detail,:directer,:starring,:rate).merge(user_id: current_user.id) 30 end 31 32end
javascript
1function post (){ 2 const submit = document.getElementById("review-btn"); 3 submit.addEventListener("click", (e) => { 4 const formData = new FormData(document.getElementById("new_reviews")); 5 const XHR = new XMLHttpRequest(); 6 XHR.open("POST", "/reviews", true); 7 XHR.responseType = "json"; 8 XHR.send(formData); 9 XHR.onload = () => { 10 const item = XHR.response.article; 11 const contentsArea = document.getElementById("contents_area"); 12 const articleText = document.getElementById("reviews_text"); 13 const HTML = ` 14 <div class="reviews"> 15 ${ item.text } 16 </div>`; 17 contentsArea.insertAdjacentHTML("afterbegin", HTML); 18 reviewsText.value = ""; 19 }; 20 e.preventDefault(); 21 }); 22}; 23 24window.addEventListener('load', post); 25
試したこと
render :new and returnの記述をコメントアウトした所、下記のようにデータのみ表示される状態になってしましました。
{"reviews":{"id":null,"title":null,"category_id":null,"detail":null,"directer":null,"starring":null,"rate":4.0,"user_id":3,"created_at":null,"updated_at":null}}
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/13 14:02
2021/09/13 14:04 編集
2021/09/13 15:15
2021/09/13 22:24