前提・実現したいこと
現在、初心者でRubyonrailsで商品のレビューアプリみたいなものを作っています。
商品を検索し、検索結果に出てきた商品をクリックすると、その商品に対してコメントができるページに飛ぶようにしたいです。
検索結果の商品をeach文で出力するところまではできたのですが、
商品名をクリックするとCouldn't find Item without an IDとでてきてしまいます。
商品名をクリックすると、該当の商品コメントページに飛ぶようにしたいです。
発生している問題・エラーメッセージ
ActiveRecord::RecordNotFound in MessagesController#index Couldn't find Item without an ID
該当のソースコード
controller
1 2 private 3 4 def message_params 5 params.require(:message).permit(:content).merge(shop_id: current_shop.id) 6 end 7 8 def set_item 9 @item = Item.find(params[:id]) ここがエラーになります。()の中に数字を指定すると問題なく作動します。 10 end 11end
routes
1 2Rails.application.routes.draw do 3 devise_for :shops 4 root "shops#index" 5 resources :shops 6 resources :items, only: [:new, :create] do 7 collection do 8 get 'search' 9 end 10 end 11 resources :messages 12end
views
1.content__upper__right 2 .content__upper__right-name 3 = link_to item.name,messages_path(@item), method: :get, class: 'search-name' 4 .content__upper__right__element 5 .content__upper__right__element-industry
試したこと
①routingの箇所で、collectionではなくmemberに変更してみたが、余計複雑になってしまった。
②viewで= link_to item.name,messages_path(@item)←ここを@item.idにしてみた。
→undefined method id' for nil:NilClass ③controllerで @item = Item.find(params[:id])を(params[:item_id})に変更した。 ④該当箇所の下にbinding.pryしてみたが、ターミナルでは Shop Load (0.2ms) SELECT
shops.* FROM
shopsWHERE
shops.
id= 1 ORDER BY
shops.
id` ASC LIMIT 1
Completed 404 Not Found in 18ms (ActiveRecord: 5.8ms | Allocations: 11390)
とでてしまう。
補足情報(FW/ツールのバージョンなど)
バージョンは Rails 6.0.3.2 です。
devise Gem インストールしています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。