我有一个应用程序,用户可以在其中投票。根据我的设置模型中存储的配置,它们仅限于每24小时的总投票数。这是我在我的投票模型中使用的代码,用于检查它们是否达到了极限。
def not_voted_too_much?
@votes_per_period = find_settings.votes_per_period #how many votes are allowed per period
@votes = Vote.find_all_by_user_id(user_id, :order => 'id DESC')
@index = @votes_per_period - 1
if @votes.nil?
true
else
if @votes.size < @votes_per_period
true
else
if @votes[@index].created_at + find_settings.voting_period_in_hours.hours > Time.now.utc
false
else
true
end
end
end
end
当它返回时,为真 - 他们被允许投票。如果false
- 他们不能。现在,它依赖于按特定顺序检索的记录,并且它选择的记录是最早的。这似乎有效,但对我来说感觉很脆弱。
我想使用:order => 'created_at DESC'
,但是当我对查询应用限制时(我只需要获得与该时段允许的票数一样多的记录),它似乎总是拉动最旧的记录而不是最新的记录,我不知道如何更改查询以获取最新的投票而不是最旧的投票。
关于最佳方式的任何想法?
答案 0 :(得分:0)
难道你不能只计算24小时之前用户的投票并按照你的限制检查吗?我错过了什么吗?
def not_voted_too_much?
votes_count = votes.where("created_at >= ?", 24.hours.ago).count
votes_count < find_settings.votes_per_period
end
(假设您已在用户模型中正确设置了votes
关联)