0
0

More than 1 year has passed since last update.

[rails]いいねが削除できない💦 →ネスト時には引数が2つ必要

Last updated at Posted at 2022-01-26

はじめに

この記事はプログラミング学習の備忘録です。
今回はrailsでいいね機能の削除ができず、時間を使ってしまったのでまとめます。

今回分かったこととしては、「ネストしている場合は引数を2つ指定する必要がある」ということです。

エラー内容

以下今回の記事の前提です。
・散歩習慣アプリを作っている
・投稿機能には、「walks」というモデルを使っている。
・いいね機能には、「likes」というモデルを使っている。

いいねを削除するために以下のように実装しました。

index.html.erb
  <%= link_to "いいねを解除" ,walk_like_path(walk),method: :delete %> 

walk_like_path(walk)で投稿に紐づくいいねを指定、
method: :deleteも付けているので問題なさそうです。
しかし表示してみると、

Image from Gyazo

「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

0
0
0

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
0
0