🦌

【Ruby on Rails】UrlGenerationError: missing required keys: [:id]エラーの対処法

2024/07/17に公開

はじめに

Ruby on Railsで記事投稿アプリを作成する中で、表記エラーにぶつかりました。
エラーを解決するのに少し時間がかかったので、記事にまとめようと思います。

エラーが発生した状況

  • Rails7.1.3.4
  • いいね機能の非同期処理を実装すべく、turbo-streamで非同期処理を実装中
  • いいねボタンを黒から白へ変更される非同期処理は確認できた(いいね後→いいね前)
  • いいねボタンを白から黒への変更される非同期処理をしようとした際に、このエラーが発生した(いいね前→いいね後)

エラーが発生した時のコード

<%= link_to article_favorite_path(@article.id, type: :like_first)

上記コードに対し、下記のエラーが発生しました。

URL生成時にエラーということは、こちらの記事を見て理解できましたが、今回の場合article_favorite_pathの後にすでに(@article.id, typle: like_first)と引数をとっているため、どこにidを指定すればいいのかを少し迷いました。

どのようにエラーを解消したか

結論から書くと、現在は

<%= link_to article_favorite_path(article, @article.id, type: :like_first)

と記載し処理が動いている状況です。(いいねボタンが黒から白、白から黒へ変化へ、非同期で処理が動いている状態)

ただ、この書き方が正しい書き方か不安だったので、ChatGPTに確認してみました。

この link_to の書き方は概ね正しいですが、@article.id の部分が二重に渡されている点が気になります。article_favorite_path に @article.id を渡すのが適切です。

とのことでした。ただ言われた通りに処理を書き換えると、先ほどと同じエラーが発生してしまうため、一旦この書き方を採用しています。
いかに綺麗にわかりやすくコードを書くか、というところまで到達できていないのが現状です。

現状ではいいね機能の非同期処理でエラー等は発生していませんが、今後リファクタリングも兼ねてよりわかりやすいコードを書けるよう研鑽していきたいと思っております。
ありがとうございました。

Discussion