#はじめに
この記事はプログラミング学習の備忘録です。
今回はrailsでいいね機能の削除ができず、時間を使ってしまったのでまとめます。
今回分かったこととしては、**「ネストしている場合は引数を2つ指定する必要がある」**ということです。
#エラー内容
以下今回の記事の前提です。
・散歩習慣アプリを作っている
・投稿機能には、「walks」というモデルを使っている。
・いいね機能には、「likes」というモデルを使っている。
いいねを削除するために以下のように実装しました。
<%= link_to "いいねを解除" ,walk_like_path(walk),method: :delete %>
walk_like_path(walk)で投稿に紐づくいいねを指定、
method: :deleteも付けているので問題なさそうです。
しかし表示してみると、
「No route matches」エラーが出てしまいました。
#原因
もしかしたら「ネストしているとpathの指定方法が変わるのでは?」と思い、rails routesを実行すると以下のように出ました。
walk_like DELETE /walks/:walk_id/likes/:id(.:format) likes#destroy
「/walks/:walk_id/likes/:id」walk_idの他に、likesのidもパスに入っています。
その後様々調べてみると、
**ネストしている場合「引数は2つ指定する必要がある」**という事がわかりました。
(参考記事↓↓)
https://qiita.com/Jwataru/items/a8e0120dd32761d70bfa
#解決策
以下のように
walk_like_path(walk,walk.likes)というように、引数を2つ指定しました。
<%= link_to "いいねを解除" ,walk_like_path(walk,walk.likes),method: :delete %>
実行してみると無事にいいねを削除する事ができました。
従ってエラーの原因は「ネストしているのに引数を1つしか指定しなかった」ということです。
#まとめ
今回はいいね機能を削除する時のエラー解決をまとめました。
分かった事は**「ネストをしている場合は2つ引数を指定する必要がある」**
という事です。
ネストをした場合の削除の仕方は初見だったので、時間を使ってしまいましたが、解決できて良かったです。
今回の記事が少しでも誰かのお役に立てれば幸いです。
(参考記事↓↓)
https://qiita.com/Jwataru/items/a8e0120dd32761d70bfa