##小説サイトを参考に真似をし練習中に起きたエラーです。
テーブル名
・novel_lists
・users
多(novel_losts):1(users)の関係です。
novel_listsには
・title
・genre
・novel_keyword
・synopsis
・user_id 以上の5つのカラムがあります。
今回usersのshow.html.erbファイルに
<% @novel_list.each do |novel_list| %> <div class="novellist_toptable"> <tbody> <tr> <td><%= link_to novel_list.title, novel_list_path(novel_list) %></td> <td><%= novel_list.genre %></td> </tr> <tr> <td></td> </tr> </tbody> </table> </div> <% end %> このように記載し、novel_list_pathへとlinkをつなげています。 このlinkを踏んだ際に出るエラーとなります
まずはusersコントローラのshowアクションの部分です。 class UsersController < ApplicationController def show @user = User.find(params[:id]) @novel_list = @user.novel_lists @followings = @user.followings.page(params[:page]) @novel_lists = NovelList.all @favposts = current_user.favposts.page
###エラー内容
ActiveRecord::RecordNotFound in NovelListsController#show Couldn't find User with 'id'=4 Extracted source (around line #9): def show @user = User.find(params[:id])ここの部分にエラーが出ています。 @novel_list = NovelList.find(params[:id]) @novel_post = NovelPost.find(params[:id]) @novel_posts = @novel_list.novel_posts
そしてエラーはNovelListsControllerといってるので、
novel_listsコントローラです。 class NovelListsController < ApplicationController def show @user = User.find(params[:id]) @novel_list = NovelList.find(params[:id]) @novel_post = NovelPost.find(params[:id]) @novel_posts = @novel_list.novel_posts end
現在自分の投稿だけを表示し、linkを踏むとNovelList id:3 には行く事が出来ます。
しかし、次に作った、id:4,5,6に飛ぶと上記のエラーが出ます。
rails コンソールでNovelList.all をした結果となります。新しく追加した、genreとnovel_keywordがnilとなってしまっております。 NovelList Load (0.3ms) SELECT `novel_lists`.* FROM `novel_lists` LIMIT 11 => #<ActiveRecord::Relation [#<NovelList id: 1, title: "異世界転生○○○", user_id: 1, created_at: "2020-02-21 15:21:45", updated_at: "2020-02-21 15:21:45", genre: nil, novel_keyword: nil, synopsis: nil>, #<NovelList id: 2, title: "異世界をスマホ一つで旅をする", user_id: 1, created_at: "2020-02-22 05:12:01", updated_at: "2020-02-22 05:12:01", genre: nil, novel_keyword: nil, synopsis: nil>, #<NovelList id: 3, title: "女神様・・・・・", user_id: 3, created_at: "2020-02-22 05:39:48", updated_at: "2020-02-22 05:39:48", genre: nil, novel_keyword: nil, synopsis: nil>, #<NovelList id: 4, title: "僕たちは・・・・テストテスト異世界転生", user_id: 3, created_at: "2020-02-23 14:13:02", updated_at: "2020-02-23 14:13:02", genre: nil, novel_keyword: nil, synopsis: nil>, #<NovelList id: 5, title: "ダンジョンがあらわれた!!", user_id: 3, created_at: "2020-02-24 14:30:39", updated_at: "2020-02-24 14:30:39", genre: nil, novel_keyword: nil, synopsis: "ダンジョンが・・・・\r\n・・・・テスト中">, #<NovelList id: 6, title: "テストダンジョン", user_id: 3, created_at: "2020-02-24 15:04:30", updated_at: "2020-02-24 15:04:30", genre: nil, novel_keyword: nil, synopsis: "テスト">]> 2.5.3 :002 >
###気づいた事。
id:4は、新しくgenreを追加しgenreを選んでから投稿しています。
id:5,6はgenre , novel_keyword ,synopsissを追加した後、選択して投稿しています。
これらが関係するのかと思ったのですが、エラーが出ているのは@user = User.find(params[:id])部分なので、
見当違いかも知れません、。
###試した事
resources :novel_lists, only: [:index, :show, :new, :create, :edit, :update, :destroy] do 現在、novel_lists単体でルーティングしています。 それを resources :users, only: [:index, :show, :new, :create, :edit, :update, :destroy] do resources :novel_lists, only: [:index, :show, :new, :create, :edit, :update, :destroy] とネストをしてuser_idが繋がるようにしたら直るかと思いしたのですが・・・エラーは変化なしでした。 その他にも、link_toで渡している(novel_list)にuserを含めようと、 def show に @novel_lists = @user.novel_listsと記載し、each文を変更したりもしてみましたが変わらずでした。
原因がわかりません。わかる方おられましたら、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/25 12:36
2020/02/25 14:14
2020/02/25 14:25