0

3つの異なるモデルでメンバールート「POST」を介して呼び出されるポリモーフィック投票モデルがあります。以下の各親モデル (routes.rb) には、対応する各コントローラーに投票メソッドがあり、正しいパラメーターを渡してそのモデルの投票を作成します。

これは、 Ryan Bates Railscast http://railscasts.com/episodes/364-active-record-reputation-systemに示されているゼロからの評価システムの同様の実装です。

これはすべてうまく機能しますが、投票の作成を Ajaxify したいと思います。

以下のように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>

ルート.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

answer_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 
4

1 に答える 1

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 %>");
于 2013-05-26T19:15:20.940 に答える