Драгоценный камень: истекающие очки
Я даю скидки на продукты на основе общего балла пользователя. Но я хотел бы призвать пользователей использовать эти очки в течение 180 дней. Таким образом, будут учитываться только баллы созданного_ < 180.days.ago.
Какой был бы простой способ получить единственную пунктуацию от 180 дней назад?
2 ответа
Кажется, слишком поздно, но сейчас я работаю над подобной ситуацией и нахожу этот пример в собственных документах.
В вашем случае код будет что-то вроде этого.
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 дней.