2013-08-26 24 views
0

在我的用户索引操作中,我遍历所有已发布状态更新并通过created_at DESC对其进行排序的用户。Rails:迭代通过状态更新时的Like按钮的Ajax

在我index.html.view

<% @users.each.do |user| %> 
<% user.status = @status %> 
<%= @status.content %> 

<div id ="like_form"> 
    <% if @status.has_like_already?(@status, current_user)%> 
     <%= render 'already_liked'%> 
    <%else%> 
    <%= render 'like'%> 
    <%end%> 
</div> 

_like.html.erb

<%= link_to "Like", likes_path(:like_for => @status.id), remote: true, :method=>:post %> 

_already_liked.html.erb

<span>Liked</span> 

create.js.erb

$("#like_form").html("<%= escape_javascript(render('users/already_liked')) %>") 

问题是我能够喜欢状态更新,第一篇文章Like按钮更改为“不同”,但在随后的点击上,类似按钮不会更改为“不同”。这是因为第一篇文章的#like_form已被更改为“不同”。由于我正在迭代,我如何才能获得类似的功能,以针对每个发布的状态使用Ajax?

回答

2

您可以将用户ID添加到div,以便您可以唯一地识别您的div的ID。

index.html.erb

<div id ="like_form_<%= user.id %>"> 

</div> 

_like.html.erb

<%= link_to "Like", likes_path(:like_for => @status.id, :user_id=>user.id), remote: true, :method=>:post %> 

create.js.erb

$("#like_form_<%= params[:user_id]%>").html("<%= escape_javascript(render('users/unlike')) %>")