【Rails】ActiveRecord::RecordNotFoundというエラーの処理方法

このエントリーをはてなブックマークに追加

現状

- user has many comments
- posts has many comments
- forums has many comments
- postでcommentを使用とするときに、以下のエラーがでる
- 論文に投稿しようとすると以下のエラーがでる

ActiveRecord::RecordNotFound in CommentsController#create
Couldn't find Forum with 'id'=



- エラーが出たコードは以下の通り

    def create
      if Forum.find(params[:forum_id]).present? #ここがエラー
        @forum= Forum.find(params[:forum_id])
        @comment = @forum.comments.create(comment_params.merge(user_id: current_user.id))
        if @comment.valid?

原因

- createで送ってのはPOST IDなので、その時FORUM IDは送っていない
- Forumのidが存在しないので、RecordNotFound Errorがでるらしい。
- ifでもしnilだとしてもと条件づけても、idが見つからない時点で例外クラスのエラーでダメらしい。

対策

- 例外クラスのエラー処理は、begin rescueを使う
- recordnotfoundは例外クラスのエラーらしいね。
- 例外クラスのエラーが生じたときはrescueで、例外時の処理を行ってくれるらしい

def create
      begin Forum.find(params[:forum_id]).present?
        @forum= Forum.find(params[:forum_id])
        @comment = @forum.comments.create(comment_params.merge(user_id: current_user.id))
        if @comment.valid?
          redirect_to @forum
        else
          flash[:alert] = "Invalid attributes."
          redirect_to @forum
        end
      rescue
        @post = Post.find(params[:post_id])
        @comment = @post.comments.create(comment_params.merge(user_id: current_user.id))
        if @comment.valid?
          RequestMailer.comment_email(@post.user, @comment.user).deliver
          redirect_to @post
        else
          flash[:alert] = "Invalid attributes."
          redirect_to @post
        end
      end
   end


0 件のコメント:

コメントを投稿