我建立了一个投票系统,在我的用户视图中是一个名为" votes"的单独模型的表单,它只包含一个提交按钮。每次按下该按钮,都会创建一个新的投票实例,然后user.vote.count
返回总计。但是,我希望更新的选票有更多的权重,所以例如一天前的投票将被计为6票,并且每过一天它就会失去一票,所以在6天后它不会计入所有。我该怎么做呢?
我使用的是Rails 4.0.10
用户控制器
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@user.votes.build
@vote = Vote.new
end
def new
@user = User.new
@users = User.all
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name)
end
end
用户模型:
class User < ActiveRecord::Base
has_many :votes
def vote
(self.votes.count )
end
end
投票控制人:
class VotesController < ApplicationController
def show
@vote = Vote.find(params[:id])
end
def new
@user = User.find(params[:user_id])
@vote = Vote.new
@votes = Vote.all
end
def create
@user = User.find(params[:user_id])
@vote = @user.votes.create(vote_params)
redirect_to user_path(@user)
end
private
def vote_params
params.permit(:user_id)
end
end
投票模型:
class Vote < ActiveRecord::Base
belongs_to :user
end
用户视图:
<%= form_for [@user, @vote] do |f| %>
<input type="hidden" id="user_id" name="user_id" value="#{@user.id}" />
<%= f.submit ": )", :onclick => 'alert("Voted up!")' %>
<% end %>
答案 0 :(得分:1)
如果你正在使用PostgreSQL,它将成为这些方面的东西。
User.votes
.select('SUM(6 - extract(day from now() - created_at)) as score')
.where("created_at >= current_date - interval '6' day")
这将获得6天或更短时间的所有投票。然后根据它的年龄(6岁)对每个投票进行评分。最后它需要各个分数的总和。