RubyonRails AJAX调用只影响集合中的第一个元素



我正在迭代一个元素集合,并试图让AJAX在集合中的特定元素上正常工作。我嵌套了一些部分,以便对这些项进行迭代,并使用如下js.erb调用:

$('#favorite_form').html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>");

这似乎只会更改集合中的第一个项目,即使我可能正在单击列表中的第五个项目。

问题:我如何指定(通过.js和AJAX)更新哪个元素?这个jQuery调用是否对单个元素不够具体?该代码适用于常规的HTTP请求,所以我想知道是否有一种方法可以指定单个元素,但我认为partials就是这么做的:/

Example View ( _favorites.html.erb )
<div id="favorite_form">
  <% if you_favorited_this?(current_user, mission) %>
    <%= render partial: 'shared/unfavorite', locals: { mission: mission } %>
  <% else %>
    <%= render partial: 'shared/favorite', locals: { mission: mission } %>
  <% end %>
</div>

您的问题似乎是选择器的特异性。一个有用的方法是使用div_for和dom_id。例如,因为看起来你在执行"任务":

# mission partial
<%= div_for mission do %>
  ...the rest of the partial...
<%= end %>

在你的js中,然后使用类似的东西:

$('#<%= dom_id @mission %>').html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>");

您可能需要稍微调整标记,但当许多记录在同一页面上时,这是获得给定记录所需选择器的一个非常好的方法。

如果你只想更新你点击的项目,你可以尝试这样的方法:

$(".favorite_form").click(function() {
    $(this).html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>");
});

回调函数中的this将仅引用实际单击的元素。