周日将记录重置为0

时间:2016-01-29 23:19:23

标签: ruby-on-rails ruby ruby-on-rails-4

因此,每个@routine每周可以有一个freebiefreebie_date。星期日上午12点,我希望freebie重置为0freebie_date重置为nil,以便用户有机会使用免费赠品周。

我想在 routine.rb 我需要这样的东西:

  def refresh_freebie
    if Date.sunday
     routine.freebie = 0
     routine.freebie_date = nil
    end
  end

然后我就不知道如何让refresh_freebie触发每个routine记录,以便在星期日点击所有freebiefreebie_date后什么都没有。

感谢您的指导朋友们!

2 个答案:

答案 0 :(得分:1)

您可以编写一个rake任务,在其中循环遍历数据库中的所有routine,并将freebiefreebie_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?上编写方法。但这只是一个想法,它可能完全是错误的方向。