因此,每个@routine
每周可以有一个freebie
和freebie_date
。星期日上午12点,我希望freebie
重置为0
,freebie_date
重置为nil
,以便用户有机会使用免费赠品周。
我想在 routine.rb 我需要这样的东西:
def refresh_freebie
if Date.sunday
routine.freebie = 0
routine.freebie_date = nil
end
end
然后我就不知道如何让refresh_freebie
触发每个routine
记录,以便在星期日点击所有freebie
和freebie_date
后什么都没有。
感谢您的指导朋友们!
答案 0 :(得分:1)
您可以编写一个rake任务,在其中循环遍历数据库中的所有routine
,并将freebie
和freebie_date
列值重置为零。
并且,您可以安排rake任务在每个星期天运行。例如,您可以使用Heroku Scheduler插件在heroku上安排rake任务。那就是它!
您的佣金任务可能如下所示:
# lib/tasks/routine.rake
namespace :routines do
desc 'Clean the routine freebies and freebie_dates'
task clean: :environment do
return unless Date.today.sunday?
Routine.all.each do |routine|
routine.freebie = 0
routine.freebie_date = nil
routine.save
end
end
end
您可以使用update_all而不是循环遍历所有记录来提高效率:
Routine.update_all(freebie: 0, freebie_date: nil)
因此,您的佣金任务变为:
# lib/tasks/routine.rake
namespace :routines do
desc 'Clean the routine freebies and freebie_dates'
task clean: :environment do
return unless Date.today.sunday?
Routine.update_all(freebie: 0, freebie_date: nil)
end
end
答案 1 :(得分:0)
所以每当freebie_date被设置为某个日期,免费赠品就会跳到1?我真的不能说,因为我只能看到你的应用程序的一小部分,但也许完全删除免费赠品是有意义的吗?您可以根据freebie_date和当前日期在例如can_have_freebie?
或has_freebee?
上编写方法。但这只是一个想法,它可能完全是错误的方向。