2 flat logo on transparent 256
2018-02-03

Ruby On Rails のエラーCouldn't find with id=が表示された際の3つの確認点

Lgf

Ruby On Railsのアプリケーションを1から作成した際に
Couldn't find Model名 with id=というエラーが発生しましたので
共有のために対応方法について記載します。

Couldn't find with id= について

このエラーは
editページなどでidを引き渡して情報を取得しようとしたが
idがnillになっている為、このエラーが発生しました。

今回はindexページからeditアクションへリンクを設定して解説します。

model:Blog
controller: BlogsController

rootの一部

   Prefix Verb   URI Pattern               Controller#Action
     root GET    /                         blogs#index
    blogs GET    /blogs(.:format)          blogs#index
    edit_blog GET    /blogs/:id/edit(.:format) blogs#edit

確認点1:pathの設定へidが設定されているか

例えば下記ページの下から4つ目のeditページへのpathに
IDが引数で設定されていなければエラーになります。

index ページ

<h1>全ての投稿一覧</h1>

<table>
  <tr>
    <th>タイトル</th>
    <th>内容</th>
  </tr>

  <% @blogs.each do |blog| %>
      <tr>
        <td><%= blog.title %></td>
        <td><%= blog.text %></td>
        <td><%=link_to "編集する",edit_blog_path(blog.id) %></td>
      </tr>
  <% end %>
</table>

確認点2:controllerのeditアクションで値の呼び出し設定ができているか

editアクションでindexページで引き渡した値を検索するコードを
記載しなければエラーになります。

class BlogsController < ApplicationController

  def index
    @blogs = Blog.all
  end

  def edit
    @blog = Blog.find(params[:id]) #IDを検索する処理を記載
  end

end

確認点3:rootの設定が複数形のresourcesで設定されているか

rootは単数形のresourceとresourcesの2つの定義が存在します。
詳細な解説はここでは省きますが、resourcesでpathを生成しないとURLにIDが引き渡せなくなり、個別の値を検索できないためエラーとなります。

Rails.application.routes.draw do

  root 'blogs#index'

  resources :blogs #resourcesで指定

end

前の記事
次の記事