限制用户在rails应用程序上的ruby中投票

时间:2011-02-01 04:00:45

标签: sql ruby-on-rails-3

我有一个应用程序,用户可以在其中投票。根据我的设置模型中存储的配置,它们仅限于每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',但是当我对查询应用限制时(我只需要获得与该时段允许的票数一样多的记录),它似乎总是拉动最旧的记录而不是最新的记录,我不知道如何更改查询以获取最新的投票而不是最旧的投票。

关于最佳方式的任何想法?

1 个答案:

答案 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关联)