使用AJAX的关注按钮仅更新第一个div

时间:2014-03-17 21:08:39

标签: javascript ajax ruby-on-rails-4 railstutorial.org

我有一个_user.html.erb部分,我在我的用户#Index操作上呈现,其中嵌入了一个表单,允许跟随和取消每个用户。我还在关系控制器中附带了create.js.erb和destroy.js.erb文件来处理AJAX。现在我必须刷新页面,以便通过单击"关注/取消关注"来查看所做的更改。用户名旁边的按钮,但第一个用户的记录行为正确。

_user.html.erb

<div id ="follow_form">
    <% if current_user.following?(user) %>
      <%= form_for(current_user.relationships.find_by(followed_id: user.id),
             html: { method: :delete },
             remote: true) do |f| %>
        <%= f.submit "Unfollow", class: "btn btn-large" %>
      <% end %>
    <% else %>
      <%= form_for(current_user.relationships.build(followed_id: user.id),
             remote: true) do |f| %>
        <div><%= f.hidden_field :followed_id %></div>
        <%= f.submit "Follow", class: "btn btn-large btn-primary" %>
      <% end %>
    <% end %>

create.js.erb

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= @user.followers.count %>')

destroy.js.erb

$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= @user.followers.count %>')

这是指向我的users_controller.rb https://gist.github.com/anonymous/9608208和我的relationships_controller.rb https://gist.github.com/anonymous/9608284

的链接

我已尝试将div更改为动态内容,例如

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

但是当我对这样的javascript进行相同的更改时

$("#follow_form_<%= user.id %>").find.html("<%= escape_javascript(render('users/unfollow')) %>")

它似乎无法运作。

我一直在试图弄清楚如何将user.id属性传递到javascript中,但我正在崩溃。

1 个答案:

答案 0 :(得分:0)

事实证明问题出在我的_follow_form.html.erb部分。 我不得不改变

<div id="follow_form">

<div id="follow_form_<%= @user.id %>">

我以为我只需要在_user.html.erb部分进行更改,但我错了。我当前的用户部分使用相同的div id来包含Users#Index视图中的按钮

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