Ограничение пользовательских голосов в приложении ruby ​​on rails - PullRequest
1 голос
/ 01 февраля 2011

У меня есть приложение, где пользователи могут голосовать за записи. Они ограничены общим количеством голосов за 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 голосов
/ 01 февраля 2011

Разве вы не можете просто посчитать голоса пользователей старше 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 в пользовательской модели)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...