前提・実現したいこと
railsで簡単なメモアプリ を作っています。
show機能を使って、メモ一覧を出力するときに、showにいくリンクをクリックすると、下記のエラーが発生しました。
仮データとして、mysqlにて、memoテーブルに、foodカラム,limit_dateカラム,user_idカラム(のちにuser登録するため)があり、全てデータを入力して作成しております。
発生している問題・エラーメッセージ
ActiveRecord::RecordNotFound in MemosController#show Couldn't find Memo with 'id'=#<Memo::ActiveRecord_Relation:0x00007fccab8e68c0> Extracted source (around line #16): def show @memos = Memo.find(params[:id]) end private
ターミナル
Started GET "/memos/%23%3CMemo::ActiveRecord_Relation:0x00007fd62b9f6470%3E" for ::1 at 2020-05-14 00:02:19 +0900 Processing by MemosController#show as HTML Parameters: {"id"=>"#<Memo::ActiveRecord_Relation:0x00007fd62b9f6470>"} Memo Load (14.2ms) SELECT `memos`.* FROM `memos` WHERE `memos`.`id` = 0 LIMIT 1 Completed 404 Not Found in 21ms (ActiveRecord: 14.2ms) ActiveRecord::RecordNotFound (Couldn't find Memo with 'id'=#<Memo::ActiveRecord_Relation:0x00007fd62b9f6470>): app/controllers/memos_controller.rb:16:in `show' Rendering /Users/Owner/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout Rendering /Users/Owner/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb Rendered /Users/Owner/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (4.3ms) Rendering /Users/Owner/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb Rendered /Users/Owner/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (19.2ms) Rendering /Users/Owner/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb Rendered /Users/Owner/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.0ms) Rendered /Users/Owner/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (224.6ms)
該当のソースコード
ruby
1class MemosController < ApplicationController 2 def index 3 @memos = Memo.include(:user) 4 end 5 6 def new 7 @memo = Memo.new 8 end 9 10 def create 11 Memo.create(memo_params) 12 redirect_to root_path 13 end 14 15 def show 16 @memos = Memo.find(params[:id]) 17 end 18 19 private 20 def memo_params 21 params.require(:memo).permit(:food, :limit_date).merge(user_id: current_user.id) 22 end 23 24end 25
下記はindexのHTMLです。1行目に詳細ページへすぐ飛べるよう仮でリンク付けてます。
ruby
1.left-contents 2 = link_to memo_path(@memo) do 3 詳細ページ 4 5 .upper-content 6 .title 使い切る食材たち 7 %form 8 .formbox 9 .formbox__food FOOD 10 %input{type:"text", class:"formbox__food__name", placeholder: " type a food name"} 11 .formbox__date LIMIT! 12 %input{type:"date", class:"formbox__date__limit"} 13 .btn 14 %input{type:"submit", class:"submit-btn", value:"add food"} 15 16 17 .main-content 18 19 .title-content 20 .title-content__food 21 22 Food Name 23 .title-content__limit 24 Limit Date 25 .list 26 .list__foods 27 - @memos.each do |memo| 28 .list__foods__one 29 = icon('fas','fish') 30 = memo.food 31 32 .list__limit 33 - @memos.each do |memo| 34 .list__limit__date 35 = icon('fas', 'exclamation-triangle') 36 = memo.limit_date 37 .list__edit-btn 38 編集 39 .list__delete-btn 40 削除
ルーティング設定
Rails.application.routes.draw do devise_for :users root to: 'memos#index' resources :memos, only: [:index, :new, :create, :show] end
試したこと
rails routes
root GET / memos#index memos GET /memos(.:format) memos#index POST /memos(.:format) memos#create new_memo GET /memos/new(.:format) memos#new memo GET /memos/:id(.:format) memos#show
他の質問者さんもつまずいている方がいらっしゃたので、参考にしながら解決できないか検討しました。
表題のエラーは、idがないのに、そこに行こうとしているということはわかりました。
また、ルーティングの設定に誤りがないことも、確認しました(念のため載せております)
ただ、mysqlで仮データを入力しており、idも入っているので、なぜ何もないと言われるのかまで、原因を追及することができませんでした。
初歩的なミスかもしれませんが、ご教授頂けますと助かります。
どうぞよろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
Rails 5.0.7.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/14 00:15 編集
2020/05/14 00:18
2020/05/14 00:34