Драгоценный камень: истекающие очки

Я даю скидки на продукты на основе общего балла пользователя. Но я хотел бы призвать пользователей использовать эти очки в течение 180 дней. Таким образом, будут учитываться только баллы созданного_ < 180.days.ago.

Какой был бы простой способ получить единственную пунктуацию от 180 дней назад?

2 ответа

Решение

Кажется, слишком поздно, но сейчас я работаю над подобной ситуацией и нахожу этот пример в собственных документах.

https://github.com/tute/merit

В вашем случае код будет что-то вроде этого.

user.score_points.where("created_at > '#{180.days.ago}'").sum(:num_points)

По-видимому, #points возвращает простое число (не объект Point). Поэтому, если вы хотите выбрать точки с заданной датой, вам нужно использовать #score_points вместо.

Надеюсь, это поможет.

Я не знаком с Merit, поэтому вам придется посмотреть, какие модели он вам дает, но вы, вероятно, можете сделать что-то подобное в своей пользовательской модели:

class User < ActiveModel::Base
  def validPonts
    self.points.select{ |p| p.created_at > 180.days.ago } 
  end
end

а затем вы вызываете @user.validPoints, чтобы получить только те точки, которые существуют за последние 180 дней.

Другие вопросы по тегам