前提・実現したいこと
昨日質問をし、解決をしたのですが、再度エラーになってしまい困っております。
質問が2回目で、わかりにくくなっていたら申し訳ございません。
商品名を検索し、商品名をクリックすると、商品のレビューができるシステムを作っています。
しかし、クリックをするとエラーが出てしまいます。
(本日、ルーティングをネスト構造にしたところ再度エラーが出てしまいました)。
おそらく、link_toでviewで変数を渡せていないのだと思います。
発生している問題・エラーメッセージ
NoMethodError in MessagesController#index undefined method `messages' for nil:NilClass
_item.html.haml(部分テンプの元はeach文で繰り返している)
.content .content__upper .content__upper-icon = icon('fas', 'user-alt', class: 'icon') .content__upper__right .content__upper__right-name = link_to item.name,item_messages_path(item.id), method: :get, class: 'search-name' .content__upper__right__element .content__upper__right__element-industry
messages_controller.rb
class MessagesController < ApplicationController def index @item = Item.find_by(id: params[:format]) @message = Message.new @messages = @item.messages.includes(:shop) end def create @item = Item.find_by(id: params[:format]) @message = @item.messages.new(message_params) if @message.save redirect_to messages_path(@item), else @messages = @item.messages.includes(:shop) render :index end end private def message_params params.require(:message).permit(:content).merge(shop_id: current_shop.id) end end
routes.rb
Rails.application.routes.draw do devise_for :shops root "shops#index" resources :shops resources :items, only: [:new, :create] do resources :messages collection do get 'search' end end end
ターミナルエラー文
Processing by MessagesController#index as HTML Parameters: {"authenticity_token"=>"VIK9b8gcffZ9HPDPXdKGxCjLo/LhETF5BsYixNCcu09h6TVbJ6pl2vYzHNFVmSS9O2fZ/1TNEYgv85DDkPQKAQ==", "item_id"=>"6"} Shop Load (0.3ms) SELECT `shops`.* FROM `shops` WHERE `shops`.`id` = 1 ORDER BY `shops`.`id` ASC LIMIT 1 Item Load (0.2ms) SELECT `items`.* FROM `items` WHERE `items`.`id` IS NULL LIMIT 1 ↳ app/controllers/messages_controller.rb:5:in `index'
試したこと
debuggerで、index controllerの中に@itemは入っているのか確認→nil
viewのlink_to以降の記述(item.id)が間違っているのではないかと思い、@item,
item.message,item:idなど記述をしてみましたが、それぞれエラー。
昨日の段階ではitem.idで問題なく商品レビューページへ飛べましたが、
routesをいじってitemとmessageをネストさせてからエラーが再度発生してしまいました。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.5
ruby on rails 6.0.3.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/10 14:58
2020/07/10 21:35
2020/07/11 23:43