Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

rails いいね機能を非同期通信に変更したいのですが、pathがわかりません

解決したいこと

posts/indexページでのいいね(like)機能を実装したのですが、いいねするとページがリダイレクトされてindexページのトップに移動してしまいます。
非同期通信に変更してストレスなくいいねできるようにしたいです。

※deviseは使用していません

https://qiita.com/hapiblog2020/items/3ba7e7edc02f01d987b9
色々な記事を参考にさせていただいているのですが、どれもlink_toのところが

<%= link_to("/likes/#{post.id}/indexcreate", {method: "post"}) do %>

こういったものではなく、

<%= link_to book_favorites_path(book), method: :delete, remote: true do %>

こういったpath(?)で指定しているみたいなのですが、path(?)をどのようにして確認すればいいのかわからず困っています。
教えていただけると幸いです。

現状のコードです

likes_controller.rb
class LikesController < ApplicationController
    before_action :authenticate_user
    
    def create
      @like = Like.new(user_id: @current_user.id, post_id: params[:post_id])
      @like.save
      redirect_to("/posts/#{params[:post_id]}")
    end
  
    def destroy
      @like = Like.find_by(user_id: @current_user.id, post_id: params[:post_id])
      @like.destroy
      redirect_to("/posts/#{params[:post_id]}")
    end
    
    def indexcreate
      @like = Like.new(user_id: @current_user.id, post_id: params[:post_id])
      @like.save
      redirect_to("/posts/index")
    end
  
    def indexdestroy
      @like = Like.find_by(user_id: @current_user.id, post_id: params[:post_id])
      @like.destroy
      redirect_to("/posts/index")
    end


  end
posts/index.html.erb

<% if @current_user && Like.find_by(user_id: @current_user.id, post_id: post.id) %>
    <%= link_to("/likes/#{post.id}/indexdestroy", {method: "post"}) do %>
        <span class="fa fa-heart liked-btn"></span>
    <% end %>
<% else %>
    <%= link_to("/likes/#{post.id}/indexcreate", {method: "post"}) do %>
        <span class="fa fa-heart unliked-btn"></span>
    <% end %>
<% end %>
<%= @post_like_count[post.id] %>
route.rb

  get "likes/:post_id/indexcreate" => "likes#indexcreate"
  get "likes/:post_id/indexdestroy" => "likes#indexdestroy"

  get "likes/:post_id/create" => "likes#create"
  get "likes/:post_id/destroy" => "likes#destroy"
  

最後まで読んでいただきありがとうございます。
教えていただけると幸いです。

0

1Answer

Comments

  1. @NetaNeta0620

    Questioner

    ありがとうございます!!!
    スクリーンショット 2023-04-20 21.22.02.png

    https://localhost:3000/rails/info/routes
    で調べてみたのですが、これはpath(?)がないということなのでしょうか?
    また、ない場合はどうすればpath(?)を追加することができるのでしょうか?

  2. asを使えば可能です!
    ↓ こちらが参考になるかと思います🙇‍♂️

  3. @NetaNeta0620

    Questioner

    ありがとうございます!
    記事読んでやってみます!!

Your answer might help someone💌