LoginSignup
19
25

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-09-11

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

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

ブログの投稿機能も作成し、いざ詳細画面を作ろうと
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

19
25
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
25