前提・実現したいこと
閲覧いただきありがとうございます。
Railsでレビューサイトを作っています。
productにひもづくreviewの編集をしたいのですがうまくいきません。
発生している問題・エラーメッセージ
エラーは出ておらず、editアクション、updateアクション共に呼ばれ、ビューも呼ばれています。
編集フォームに入力しトップに戻ることができますが、カラムの値が更新されていません。
createとdestroyは正常に動きます。
該当のソースコード
reviews_controller.rb
Ruby
1 def edit 2 @review = Review.find(params[:id]) 3 end 4 5 def update 6 review = Review.find(params[:id]) 7 review.update(review_params) if current_user.id == review.user_id 8 end 9 10 private 11 def review_params 12 params.require(:review).permit(:text).merge(product_id: params[:product_id], user_id: current_user.id) 13 end
edit.html.haml
haml
1 = form_for (@review) do |f| 2 .form__text 3 = f.text_area :text, placeholder: @review.text 4 .form__buttom 5 = f.submit "更新する"
routes.rb
Ruby
1Rails.application.routes.draw do 2 devise_for :users 3 resources :users, only: :show 4 resources :reviews, except:[:new, :create] 5 resources :products, only:[:index, :show] do 6 resources :reviews, only:[:new, :create] 7 end 8 root 'reviews#index' 9end
↑newとcreateのみproductにネストさせています(これがいけない?)
はじめは全部ネストさせていたのですが、editもネストさせるとidが二つ(/products/:product_id/reviews/:id)のようになり
link_toなどでprefixに引数を渡しても先頭の:idにしか反映されなかったので、
editはそもそもproductにネストさせる必要ないかなーと思いこのようにしました。
↓ちなみに、new.html.haml
haml
1= form_for [@product, @review] do |f| 2 .form__text 3 = f.text_area :text 4 .form__buttom 5 = f.submit "投稿する"
newとcreateはこれでうまくいっています。
試したこと
updateアクションでbinding.pry
{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"pyTs75BIVj8bu7t9lyDJd/6n6pZOFb93dRUADR0+/2KGlJD5wKxagKMtFr0T3eU32/YX/7rNolaHzBokCyqRNw==", "review"=><ActionController::Parameters {"text"=>"初投稿〜\r\n編集後"} permitted: false>, "commit"=>"更新する", "controller"=>"reviews", "action"=>"update", "id"=>"12"} permitted: false>
ruby 2.5.1
paramsはきちんと渡っていると思うので、なぜうまくいかないか分かりません。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー