Rails:迭代状态更新时的Ajax for Like按钮

时间:2013-08-26 07:18:45

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-3

在我的用户索引操作中,我正在遍历已发布状态更新并按created_at DESC对它们进行排序的所有用户。

在我的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按钮不会更改为不同。这是因为第一篇文章的#like_form已经更改为“不同”。由于我正在迭代,我如何获得类似的功能,以便为每个发布的状态使用Ajax?

1 个答案:

答案 0 :(得分: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')) %>")