🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 6

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

Q&A

解決済

2回答

974閲覧

params[:id]で取得するIDがズレてしまう

shirapon31

総合スコア4

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/01/12 08:12

現在クチコミ投稿機能を作成していて、
イメージ説明
No.1のクチコミの編集のリンクを押すと下記のようにNo.3の投稿データを取得してしまいます。
イメージ説明
また、新しい投稿をするとその新しい投稿のIDを取得してどれを押しても最新のIDの投稿(上記の写真だとNo.3)にしか飛べず、一旦リロードをしてリンクを押すと配列で一番最初のID(上記の写真だとNo.1)の投稿を取得してきてどの投稿を押しても配列で一番最初の投稿しか編集できなくなってしまいます。
削除リンクを押しても同様の現象が発生してしまっています。

エラーが発生しない為原因が掴めないためアドバイスいただけるとありがたいです。

controller

1class WomsController < ApplicationController 2 before_action :set_store, only: [:edit, :new, :create, :update] 3 before_action :correct_wom, only: [:destroy] 4 before_action :set_wom, only: [:edit, :update, :destroy] 5 before_action :set_favorite 6 before_action :set_item 7 8 def index 9 @wom = Wom.find_by(params[:id]) 10 @store = Store.find(params[:store_id]) 11 end 12 13 def new 14 @wom = Wom.new 15 end 16 17 def create 18 @wom = current_user.woms.build(wom_params) 19 if @wom.save 20 render 'woms/index' 21 elsif @wom.title.length >= 50 && @wom.content.length >= 140 22 flash.now[:alert] = "タイトルは50字,クチコミは140字以内で入力してください" 23 render 'woms/new' 24 elsif @wom.content.length >= 140 25 flash.now[:alert] = "クチコミは140字以内で入力してください" 26 render 'woms/new' 27 elsif @wom.title.length >= 50 28 flash.now[:alert] = "タイトルは50字以内で入力してください" 29 render 'woms/new' 30 end 31 @wom.user_id = current_user.id 32 end 33 34 def edit 35 end 36 37 def update 38 if @wom.update(update_params) 39 redirect_to store_woms_path 40 elsif @wom.title.length >= 50 && @wom.content.length >= 140 41 flash.now[:alert] = "タイトルは50字,クチコミは140字以内で入力してください" 42 render 'woms/edit' 43 elsif @wom.content.length >= 140 44 flash.now[:alert] = "クチコミは140字以内で入力してください" 45 render 'woms/edit' 46 elsif @wom.title.length >= 50 47 flash.now[:alert] = "タイトルは50字以内で入力してください" 48 render 'woms/edit' 49 end 50 end 51 52 def destroy 53 @wom.destroy 54 redirect_to store_woms_path 55 end 56 57 private 58 59 def wom_params 60 params.require(:wom).permit(:store_id, :title, :content, :visit_date) 61 end 62 63 def set_wom 64 @wom = Wom.find(params[:id]) 65 end 66 67 def set_store 68 @store = Store.find(params[:store_id]) 69 end 70 71 def correct_wom 72 @wom = Wom.find(params[:id]) 73 redirect_to root_url if @wom.nil? 74 end 75 76 def update_params 77 params.require(:wom).permit(:store_id, :title, :content) 78 end 79 80 def set_favorite 81 if user_signed_in? 82 @favorite = Favorite.find_by(store_id: params[:store_id], user_id: current_user.id) 83 end 84 end 85 86 def set_item 87 @item = Item.find_by(params[:item_id]) 88 end 89end

HTML

1<%= provide(:title, 'クチコミ') %> 2<%= render 'layouts/link_nabvar' %> 3<div class="wom-link"> 4 <% if user_signed_in? %> 5 <%= link_to 'クチコミを投稿する', new_store_wom_path(@store.id), class: 'btn btn-success' %> 6 <% else %> 7 <%= link_to 'クチコミを投稿する', new_user_session_path, class: 'btn btn-success' %> 8 <% end %> 9</div> 10<% if @store.woms.present? %> 11 <% @store.woms.each do |w| %> 12 <div class="wom-area"> 13 <span><%= link_to "削除", store_wom_path(@store, @wom), method: :delete, class: "wom-delete" %></span> 14 <span><%= link_to "編集", edit_store_wom_path(@store, @wom), class: "wom-update" %></span> 15 <h1 class="wom-list"><%= w.title %></h1> 16 <div class="wom-list"><%= w.content %></div> 17 </div> 18 <% end %> 19<% else %> 20 <h1 class="not-wom-message">まだクチコミはありません</h1> 21<% end %>

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

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

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

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

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

guest

回答2

0

ベストアンサー

(@store, @wom) の @wom を w にしてください

投稿2021/01/12 10:43

winterboum

総合スコア23567

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

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

shirapon31

2021/01/12 10:56

アドバイスの通り修正行ったところ無事にIDを取得できて正常に動くようになりました! 本当にありがとうございます!
guest

0

色々操作していく中での気づきなのですが、
・paramsで受け取っている値が配列の一番最初のものを受け取っている
・update・destroyアクションをすることにItem.allで取得しする値の順番が入れ替わる。
上記のふたつが原因で起こっているようなのですが解決方法は不明です。

投稿2021/01/12 09:04

shirapon31

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問