所以我开发了模型关联和计数器缓存列,如第一个答案所示:Model association question
现在我想知道,在创建两个按钮之后,一个用于upvote和downvote,以及显示计数器缓存的投票数:<%= pluralize video.video_votes.size, 'vote' %>
我应该如何创建控制器方法投票计数将增加1或减少1?我很确定我自己可以找出AJAX部分,所以我最初对初始做这个普通的HTTP请求感到好奇。 (当然,我也不介意帮助AJAX ......)
答案 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)
计数器缓存在增加时递增 创建此类的对象 当它被摧毁时减少。
@video = Video.find(params[:id])
@video.increment!(:votes_count)
#or
@video.decrement!(:votes_count)