Ruby on Rails AJAX调用仅影响集合中的第一个元素

时间:2012-03-19 01:58:49

标签: jquery ajax ruby-on-rails-3 partial-views

我正在迭代一系列元素,并尝试让AJAX在集合中的特定元素上正常工作。我正在嵌套一些部分内容,以便迭代这些项目并使用js.erb这样的调用:

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

这似乎只会更改集合中的第一个项目,即使我可以点击列表中的第5个项目,例如。

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

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>

2 个答案:

答案 0 :(得分:2)

您的问题似乎是选择器特异性。一个有用的事情是使用div_fordom_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 } %>");

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

答案 1 :(得分:0)

如果您只是尝试更新您点击的项目,可以尝试以下方式:

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

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