はじめに
Ruby on Railsを使っていいね機能を実装しているが、教材や記事通り実装しても謎のエラーに苦しめられる・・・という経験をしたことがある人を何度も目にしてきました。
今回がそういった人に向けて、よく見落とされがちなエラー解決の方法を伝授します!
エラー
解決方法
ルートもコントローラーの記述も全部あっているはずなのに上記のようにNo route matches と怒られる方は一度viewページを確認してみてください!
いいねボタンがlink_toになっていませんか???
<% 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に書き換えてみてください!
<% 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 %>
これで多くは解決するはずです!
最後に
いかがでしたでしょうか?
まさかこんなところ!?と思う方も多かったのではないでしょうか。
少しでも多くの人の開発の助けとなっていれば幸いです!
ご精読ありがとうございました!