使用Thumbs_up gem在Rails 4中进行AJAXifying投票

时间:2014-09-25 08:59:41

标签: javascript ruby-on-rails ajax

我正在尝试使用AJAX调用执行一个非常简单的投票模块。不幸的是,我已经坚持了4天了。我还是Rails的新手,我想知道我在这里做错了什么!

网站的概念非常简单。有一个用户可以投票的帖子列表(称为Topic)。我已经将Devise用于用户模型,使用Thumbs_up进行投票。

以下是视图片段:index.html.erb

<td id='topic_<%=topic.id%>_votes'> <%= pluralize(topic.votes.count, "vote") %> </td>
<td><%= link_to('Vote for this post!', vote_up_topic_path(topic), :method => :post, :remote     => true) %></td>

这是控制器:topics_controller.rb

def vote_up
  current_user.vote_exclusively_for(@topic = Topic.find(params[:id]))
  respond_to do |format|
    format.js
  end
end

这是视图/主题中的JavaScript:vote_up.js.erb

<% if current_user.voted_on?(@topic = Topic.find(params[:id])) %>
  $('topic_<%=@topic.id%>_votes').html('<%= pluralize(@topic.votes.count, "vote") %>');
<% else %>
  alert("You can only vote on <%= @topic.title %> once!")
<% end %>

当我启动Rails服务器并单击投票链接时,我可以看到(在终端中)它确实处理了vote_up.js.erb文件,但浏览器中没有任何变化。只有当我刷新它时,它才会显示增加的票数。投票正在数据库中记录,但在浏览器中没有确认。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

由于您为该Div使用了ID,因此请添加#&#39;#&#39;在topic_up.js.erb代码中的topic_&lt;%= @ topic.id%&gt; _votes之前。

应该是这样的:

$('#topic_<%=@topic.id%>_votes').html('<%= pluralize(@topic.votes.count, "vote") %>');