通过jQuery提升帖子

时间:2014-04-30 17:51:13

标签: jquery ruby-on-rails

我的申请中的问题可以被赞成。但是,点击upvote按钮后页面会重新加载。我已经四处搜索并找到了通过jQuery实现的方法,因此页面不会重新加载,但我无法让它们工作(我是jQuery的新手)。请告诉我我必须添加什么来使这项工作。

以下是提出问题的链接:

<%= link_to "Upvote", upvote_comment_question_path(question.comment, question) %>

这是问题控制器中的upvote方法(现在它重定向回同一页面):

 def upvote
   @question = Question.find params[:id]
   @question.liked_by current_user
   redirect_to post_comment_path(@question.comment.post, @question.comment)
 end

1 个答案:

答案 0 :(得分:1)

你真正需要jQuery的是更新页面上的upvote计数。按照惯例,链接使用GET方法,但您正在修改某些内容,因此PUT是您想要的操作。您可以修改link_to的方法,也可以使用button_to进行自定义操作。

确保您的路线反映正确的操作:

resources :questions do
  member do
    put 'update_votes'
  end
end

你想在你的视野中从这样的事情开始。

<% @questions.each do |q| %>
  <div id="<%= q.id %>">
      <%= link_to "Upvote", upvote_comment_question_path(q.comment, q), remote: true, method: :put %> 
      <div class="upvote-count"><%= q.upvote_count %></div> 
      <div class="question">Content</div><br />
  </div>
<% end %>

您的div需要一个ID,以便在更新后可以找到它。

link_to中的

remote: true使用AJAX提交,因此您的页面不会刷新。此时,您不希望您的upvote操作重定向到任何地方,您希望它执行upvote.js.erb,这将是它的默认操作。修改控制器操作:

 def upvote
   @question = Question.find params[:id]
   @question.liked_by current_user
 end

upvote.js.erb已经可以访问@question了,所以它只需要这样做:

$("#<%= @question.id %> .upvote-count").html("<%= @question.likes %>");

这应该更改您的upvote计数的值以匹配新值。