質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

887閲覧

ActiveRecord::RecordNotFound in BoardsController#showを解決したい

danburudoa

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/04/08 08:33

前提・実現したいこと

掲示板アプリを作成中です。userモデル、boardモデル、commentモデルがあります。コメントを書いて、送信ボタンを押すと、ActiveRecord::RecordNotFound in BoardsController#showというエラーが出てしまいます。しかし、テーブルにはエラーが出た部分のコメントは追加されています。

発生している問題・エラーメッセージ

https://gyazo.com/4efc4f60d0bc2e4485e5e7547de2a3ab

該当のソースコード

show.html.erb <div class="board__comments"> <% if @comments %> <% @comments.each do |comment| %> <li class="comments_list"> <%= comment.text %> <%= link_to "#{comment.user.nickname}", "/users/#{comment.user.id}", class: :comment_user %> </li> <% end %> <% end %> </ul> <% if user_signed_in? %> <%= form_with(model: [@board, @comment], local: true ,class: :show_comment ,id: :form) do |f| %> <div class="field"> <%= f.label :text, "コメントを投稿する",class: :show__text %><br /> <%= f.text_area :text ,class: :show__btn%> </div> <div class="actions"> <%= f.submit "送信する", class: :form__btn %> </div> <% end %> <% end %> </div>
boards_controller.rb class BoardsController < ApplicationController def index @boards = Board.includes(:user) end def new @board = Board.new end def create @board = Board.new(board_params) if @board.save redirect_to root_path else render :new end end def show @board = Board.find(params[:id]) ⇦ここがエラー部分 @comment = Comment.new @comments = @board.comments.includes(:user) end def edit @board = Board.find(params[:id]) end def update @board = Board.find(params[:id]) @board.update(board_params) if @board.save redirect_to root_path else render :edit end end def destroy @board = Board.find(params[:id]) @board.destroy redirect_to root_path end private def board_params params.require(:board).permit(:title,:text,:image).merge(user_id: current_user.id) end end
comments_controller.rb class CommentsController < ApplicationController def create @comment = Comment.new(comment_params) if @comment.save redirect_to board_path(@comment.board) else @board = @comment.board @comments = @board.comments render "boards/show" end end private def comment_params params.require(:comment).permit(:text).merge(user_id: current_user.id, board_id: params[:board_id]) end end
routes.rb Rails.application.routes.draw do devise_for :users root to: "boards#index" resources :boards do resources :comments, only: :create end resources :users, only: :show end

試したこと

ルーティング、アソシエーション、データベースはしっかり記述されているか確認した。

補足情報(FW/ツールのバージョンなど)

初投稿です。必要な情報があれば追加で送りますので、よろしくお願いします

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

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

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

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

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

neko_daisuki

2021/04/09 05:44

app/models/comment.rb を追記してください
guest

回答1

0

ベストアンサー

全体的な流れが良くわからないのですが、
レコードはちゃんと追加されていますか?

もしくはparams[:id]の中身はちゃんと追加されたレコードのidが指定されていますか?
どこかからリダイレクトやリンクがされているなら、その元でちゃんとIDが指定できていますか?

おそらく上記のどれかだと思います。

そのエラーは通常検索結果が見つからない時に返るエラーだと思います。

投稿2021/04/08 10:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/04/09 05:25

ごめんなさいUIをお見せ頂いてもこちらで検証できないので分からないですが。 すでに申し上げていますが、エラーが起きているところでparams[:id]は確かに存在していますか? とりあえずparamsの中身を確認してください。 params[:id]がセットされていなければ、findできるはずが無いのはわかりますでしょうか?
退会済みユーザー

退会済みユーザー

2021/04/09 05:26

なぜ確認せずに更に質問を重ねるのかが理解できかせん、、、、
danburudoa

2021/04/09 06:24

無茶な質問をしてしまって申し訳ありませんでした。paramsに関しても知識が不十分でした。 paramsの中身を確認したところ、params[:id]の中身はちゃんと追加されたレコードのidが指定されていました。
danburudoa

2021/04/09 06:34

comment.rbの確認したところ、アソシエーションの記述が間違っていることに気がつきました。 そこを修正したところ、無事解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問