Help us understand the problem. What is going on with this article?

[Rails]params[:id]に値を渡す

簡易ブログアプリ作成中に起きたエラーで詰まったので記録。

詳細、編集、削除画面に遷移しない

ブログの投稿機能も作成し、いざ詳細画面を作ろうと
viewファイルを作成して、link_toでリンク先も作成し、コントローラーで
アクションも定義したのに、エラーになりました。

エラー内容は「Couldn’t find Blog with ‘id’ = :id」

スクリーンショット 2019-09-11 22.20.41.png

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と書けば値として取得してくれていたので良い勉強になりました。

参考
https://poyopoyo0.hatenablog.com/entry/2016/02/29/100431

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away