Ruby on Rails中的Ajax投票方法

时间:2011-03-17 20:02:11

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

所以我开发了模型关联和计数器缓存列,如第一个答案所示:Model association question

现在我想知道,在创建两个按钮之后,一个用于upvote和downvote,以及显示计数器缓存的投票数:<%= pluralize video.video_votes.size, 'vote' %>我应该如何创建控制器方法投票计数将增加1或减少1?我很确定我自己可以找出AJAX部分,所以我最初对初始做这个普通的HTTP请求感到好奇。 (当然,我也不介意帮助AJAX ......)

2 个答案:

答案 0 :(得分:3)

控制器

class VideoVotes < ApplicationController
  ...
  def create
    @vote = VideoVote.new(params[:video_vote])
    @vote.user = current_user
    @vote.save
  end

  # OR if you want

  def create
    # you can use params[:video_id] instead of params[:video_vote][:video_id]
    # but you should specify it in your view
    @video = Video.find(params[:video_vote][:video_id])
    @vote = @video.video_votes.new
    @vote.user = current_user
    @vote.save
  end
  ..
end

AJAX magick,/ app /viwes / video_votes / create.js.erb
我将使用jQuery,所以请查看如何安装它

$("#votes").html("Votes: <%= @vote.video.video_votes.size %>")
# or with @video variable
$("#votes").html("Votes: <%= @video.video_votes.size %>")

查看:

<%= @video.description or whatever %>
<p id='votes'>Votes: <%= @video.video_votes.size %></p>
<p><%= link_to "+1", video_votes_path('video_vote[video_id]' => @video.id), :method => :post, :remote => true %></p>

这就是全部。这可能是一些错误

答案 1 :(得分:1)

  

计数器缓存在增加时递增   创建此类的对象   当它被摧毁时减少。

来自ruby on rails api

更新

@video = Video.find(params[:id])
@video.increment!(:votes_count)
#or
@video.decrement!(:votes_count)