Ajaxifying投票创建" POSTs"通过会员路线

时间:2013-05-26 18:57:58

标签: javascript ruby-on-rails ruby ajax ruby-on-rails-3

我有一个多态投票模型,通过3个不同模型的成员路径“POST”调用。在下面的每个父模型(routes.rb)中,我在每个相应的控制器中都有一个投票方法,它传递正确的参数,以便为该模型创建投票。

这是Ryan Bates Railscast中显示的从头开始评级系统的类似实现http://railscasts.com/episodes/364-active-record-reputation-system

这一切都很好但是我想Ajax化创建投票。

如果通过按照以下方式发布到vote_object_path创建投票,我该怎么做?我已经尝试了一个jQuery函数来发布表单但是它错误地要求创建/投票模板,如果可能的话我想保留这个实现的简单性。

<div class="vote">
  <b>Votes: <%= answer.votes_count %></b><br>
  <%= link_to "up", vote_answer_path(answer, value: 1), method: "post" %>
 <%= link_to "down", vote_answer_path(answer, value: -1), method: "post" %>
</div>

的routes.rb

resources :questions do
     resources :comments, except: [:edit, :update]
     member { post :vote }
   end

  resources :comments do 
    member { post :vote }
  end 

  resources :answers do 
    member { post :vote }
  end

answers_controller.rb

def vote 
    @vote = current_user.votes.build(value: params[:value], votable_id: params[:id], votable_type: "Answer")
    respond_to do |format|
    if @vote.save
      format.html {redirect_to :back, notice: "Vote submitted"}
      format.js
    else
      format.html {redirect_to :back, alert: "You can't vote on your own content"}
      format.js
    end
  end
end 

1 个答案:

答案 0 :(得分:1)

我建议您将jQuery绑定,POST查询,并更新HTML。

$('a.vote').click(function () {
  var url = this.href; // get URL link
  $.post(url);
});

然后,在vote.js.erb

$('#vote_count').html("Votes: <%= current_user.votes %>");