【问题标题】:rake task to expire customers points balance耙任务到期客户积分余额
【发布时间】:2016-06-27 11:06:28
【问题描述】:

我正在尝试研究如何编写一个每天运行的 rake 任务,并找到剩余天数为 0 的位置以将列数量更新为零。

我在我的模型中定义了以下方法,尽管它们似乎并不完全有效,因为我在视图中收到以下错误

undefined method `-@' for Mon, 27 Jun 2016:Date

def remaining_days
    expired? ? 0 : (self.expire_at - Date.today).to_i
  end

  def expired?
    (self.expire_at - Date.today).to_i <= 0
  end
def expire_credits
    if expired?
      self.update(:expire_at => Date.today + 6.months, :amount => 0)
    end
  end

对于我从未写过这些的 rake 任务,我认为我可以调用 StoreCredit 的一个方法,如果满足某些条件,该方法将使积分过期,但我不确定这一切是如何工作的

task :expire_credits => :environment do
  puts 'Expiring unused credits...'
  StoreCredit.expire_credits
  puts "done."
end

【问题讨论】:

    标签: ruby-on-rails activerecord rake


    【解决方案1】:
    # model/store_credit.rb
    # get all store_credits that are expired on given date, default to today
    scope :expire_on, -> (date = Date.current) { where("expire_at <= ?", date.beginning_of_day) }
    
    class << self
      def expire_credits!(date = Date.current)
        # find all the expired credits on particular date, and update all together 
        self.expire_on(date).update_all(amount: 0)
      end
    end
    

    既然是 rake 任务,我觉得把所有过期的一起更新会更高效

    #rake file
    result = StoreCredit.expire_credits!
    puts "#{result} records updated"
    

    检索记录计数更新

    class << self
      def expire_credits!(date = Date.current)
        # find all the expired credits on particular date, and update all together 
        records = self.expire_on(date)
        records.update_all(amount: 0)
        records.length
      end
    end
    

    【讨论】:

    • 是否有办法报告更新了多少用户/记录?
    • @Paul'Whippet'McGuane 更新了 rake 部分,update_all 的结果将为您提供更新的记录数,因此只需将其分配给一个变量并使用它。
    • 这似乎没有让我获得记录数:S
    • @Paul'Whippet'McGuane 这很奇怪,我在控制台中尝试过,对我来说似乎很好。我添加了一些修改,这个应该可以工作
    【解决方案2】:

    你调用类方法但定义实例方法。您需要定义类方法:

    def self.expire_credits
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多