如何使用 AJAX 在索引视图上喜欢对象?

Posted

技术标签:

【中文标题】如何使用 AJAX 在索引视图上喜欢对象?【英文标题】:How to like object on index view with AJAX? 【发布时间】:2020-09-21 15:58:08 【问题描述】:

我在 rails 应用中有用户喜欢的对象。它工作正常。但我正在尝试将ajax 功能添加到like 按钮,所以当我点击它时,它会自动更新。

它适用于索引列表中的第一个对象,但其他对象不通过 ajax 更新。

我认为这与我使用类的事实有关。我将如何进行可能的更改以使用 ID 来确保每个对象都可以更新。我尝试过使用 ID,但我没有在这里做任何事情。有什么想法吗?

这是我的 vote.js.erb 文件

    <% if current_user.liked? @candidate %>
         $('.like-btn').removeClass('liked');
     <% else %> 
         $('.like-btn').addClass('liked');
    <% end %>  
        $('.likes-count').html("<%= @candidate.get_upvotes.size %>")

这是我的看法

       <%= link_to like_candidate_path(candidate), class: "like-btn", method: 
       :put, remote: :true do %> 
       <div>
           <span><p><i class="fa fa-thumbs-up"></i></p></span>
       </div>
       <% end %> 
       <span class="likes-count"><%= candidate.get_upvotes.size %></span>

【问题讨论】:

【参考方案1】:

在你看来,

<%= link_to like_candidate_path(candidate), class: "like-btn",id:"like_button_#candidate.id" method: 
       :put, remote: :true do %> 
<span class="likes-count" id="likes_count#candidate.id"><%= candidate.get_upvotes.size %></span>

在您的控制器中,

def vote
   #Your code to udpate here
   respond_to do |format|
      format.js
   end
end

在你的 vote.js.erb 中

<% if current_user.liked? @candidate %>
  $('#like_button_<%=@candiate.id%>').removeClass('liked');
<% else %> 
  $('#like_button_<%=@candiate.id%>').addClass('liked');
<% end %>  
$('#like_count_<%=@candiate.id%>').html("<%= @candidate.get_upvotes.size %>")

希望这会有所帮助!

【讨论】:

由于某种原因不起作用。记录正在更新,但不是通过 ajax 刷新。重要的是要注意,我必须修正你的一些 @candiate 拼写是正确的,然后我也修正了 likes_count 为 like_count 但这仍然没有成功:(

以上是关于如何使用 AJAX 在索引视图上喜欢对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 postlistview 和 postdetailview 中使用 ajax

如何在返回的 AJAX 调用上使用 django 模板标签?

如何在 .click() 上使用 AJAX 将 id 从视图传递到控制器

使用django时如何在ajax调用中传递request.user?

如何在 jQuery ajax 上设置 UpdateTargetId

BLOB 如何存储在索引视图中?