0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

kuvoAdvent Calendar 2022

Day 16

【エラー解決】Ruby on Rails いいね機能 〜まさかそこ!?ってなる落とし穴を解決する方法〜

Last updated at Posted at 2022-12-15

はじめに

Ruby on Railsを使っていいね機能を実装しているが、教材や記事通り実装しても謎のエラーに苦しめられる・・・という経験をしたことがある人を何度も目にしてきました。

今回がそういった人に向けて、よく見落とされがちなエラー解決の方法を伝授します!

エラー

image.png

解決方法

ルートもコントローラーの記述も全部あっているはずなのに上記のようにNo route matches と怒られる方は一度viewページを確認してみてください!
いいねボタンがlink_toになっていませんか???

index.html.erb(変更前)
<% if @post.favorite?(current_user) %>
    <%= link_to post_favorite_path(@post.id), method: :delete do %>
        <span style="color:red;">❤︎</span>
    <% end %>
<% else %>
    <%= link_to post_favorites_path(@post.id), method: :post do %>
        <span>❤︎</span>
    <% end %>
<% end %>

link_toメソッドのHTTPメソッドには、GETがデフォルトで指定されています。

そこで、いいね機能をpostアクションといいね削除をdeleteアクションにするために、link_toメソッド内で、method: :postとmethod: :deleteとしてHTTP通信の種類を指定する必要があります。

しかし!!!

このメソッドを指定してもなお、HTTPメソッドがGETのままになることがしばしばあります。。。

そこで、link_toで記述したいいね機能を、デフォルトがpostメソッドであるbutton_toに書き換えてみてください!

index.html.erb(変更後)
<% if @post.favorite?(current_user) %>
    <%= button_to post_favorite_path(@post.id), method: :delete do %>
        <span style="color:red;">❤︎</span>
    <% end %>
<% else %>
    <%= button_to post_favorites_path(@post.id), method: :post do %>
        <span>❤︎</span>
    <% end %>
<% end %>

これで多くは解決するはずです!

最後に

いかがでしたでしょうか?
まさかこんなところ!?と思う方も多かったのではないでしょうか。
少しでも多くの人の開発の助けとなっていれば幸いです!
ご精読ありがとうございました!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?