我有这个逻辑,但发现难以投入代码;我可以但不确定何时使用Sidekiq执行此操作
将上个月的费用与本月费用(本日历月末)进行比较
工人阶级:
def perform(*args) # params left out for this example
[...]
last_month = user.expenses.where(date: 1.month.ago) # ie Jan
this_month = user.expenses.where(date: Date.today.at_beginning_of_month..Date.today.end_of_month) # ie Feb (end of Feb)
# Then my if else here
end
控制器:
CompareExpenseWorker.perform_in(...)
我被困在那里。什么时候应该这样做?在1或2个月内?
我觉得我的想法是在玩我的游戏。如果我在1个月内执行,我将只在上个月而不是当月(完整日历月)。如果在2个月内完成,我觉得这不正确。是吗?
答案 0 :(得分:2)
首先,last_month
的计算应为:
# last_month = user.expenses.where(date: 1.month.ago) # incorrect
last_month = user.expenses.where(
date: 1.month.ago.beginning_of_month..1.month.ago.end_of_month)
我相信,整个逻辑应该改变。如果你想比较整整两个月,那就应该这样做:
month_2 = user.expenses.where( # e.g. Feb
date: 2.month.ago.beginning_of_month..2.month.ago.end_of_month)
month_1 = user.expenses.where( # e.g. Mar
date: 1.month.ago.beginning_of_month..1.month.ago.end_of_month)
# run at any day in April, to compare two full months
# user_id is the id of the user to build reports for
CompareExpenseWorker.perform(user_id)
此外,我不认为应该将CompareExpenseWorker
的呼叫放入控制器,使用cronjob
来计划,每月1日安排。