Rails Upvote AJAX无法正常工作

时间:2015-11-17 08:23:42

标签: javascript ruby-on-rails ajax

所以我的upvote链接正在替换所有链接的投票计数器而不是单个链接。帮助

控制器

  def upcount
    @category = Category.find(params[:id])
    @category.upcount
    @category.save
    respond_to do |format|
      format.html {redirect_to categories_path(@category)}
      format.js
    end
  end

查看

  <% @categories.each do |category| %>
  <div class="col-md-3 col-sm-6 hero-feature">
    <div class="thumbnail">
      <%= image_tag category.image.url(:large) %>
      <div class="caption">
        <%= category.name %> - <%= category.quote %></p>
        <%= link_to "Upvote", upcount_category_path(category), method: "put", remote: true %>
        <div id="total-votes">
          <%= category.count %>
        </div>
      </div>
    </div>
  </div>
  <% end %>

Upcount.js.erb

$("#total-votes").html("<%= @category.count %>")

点击第二个链接会将第一个和第二个链接替换为15.任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

HTML ID应该是唯一的。您复制的“总票数”ID会导致HTML无效。它也使您的javascript混乱,因为它不知道您想要定位哪个div。

您可以通过将类别ID添加到html id total-votes-<%= category.id %>来解决此问题,以便它对所有人都是唯一的。

完整示例:

查看文件

<% @categories.each do |category| %>
  <div class="col-md-3 col-sm-6 hero-feature">
    <div class="thumbnail">
      <%= image_tag category.image.url(:large) %>
      <div class="caption">
        <%= category.name %> - <%= category.quote %></p>
        <%= link_to "Upvote", upcount_category_path(category), method: "put", remote: true %>
        <div id="total-votes-<%= category.id %>">
          <%= category.count %>
        </div>
      </div>
    </div>
  </div>
  <% end %>

<强> Upcount.js.erb

$("#total-votes-<%= @category.id %>").html("<%= @category.count %>")