簡易ブログアプリ作成中に起きたエラーで詰まったので記録。
#詳細、編集、削除画面に遷移しない
ブログの投稿機能も作成し、いざ詳細画面を作ろうと
viewファイルを作成して、link_toでリンク先も作成し、コントローラーで
アクションも定義したのに、エラーになりました。
エラー内容は「Couldn’t find Blog with ‘id’ = :id」
app/views/blogs/index.html.erb
<%= link_to "詳細", "/blogs/:id", method: :get %>
qpp/controllers/blogs_controller.rb
def show
@blog = Blog.find(params[:id])
end
idが見つからない?
findメソッドを使ってparams[:id]を取得するように定義しているのに?
rake routesを確認したら、ルートパスも合っているし
何が原因なのかさっぱり検討がつきません。
findメソッドでの記述の仕方を変えてみたり、find_byメソッドに変えてみたり
whereメソッドにしてみたり。
試しても結果は変わらなかったので、次はviewファイルのパスが間違えていると考えてルートパスを色々変更してみるも結果は変わりませんでした。
ここあたりで 変数 paramsにid(値)が入っているのか?と思い始めるようになり(遅い)
binding.pryを使って確認しました。
結果は下記の通りになりました。
id = ":id"
idがidのままになっていて値になっていませんでした。
viewからコントローラにidを渡す時に値を指定しないといけないようでしたので
viewファイルに以下の指定をしました。
app/views/blogs/index.html.erb
<%= link_to "詳細", blog_path(blog.id), method: :get %>
<%= link_to "リンク名", アクション名_コントローラ名_path(渡したい変数名) %>
これで解決しました。
idを指定してあげないと値として受け取れなかったんですね。
今までは:idと書けば値として取得してくれていたので良い勉強になりました。