rake 任务使客户积分余额过期
rake task to expire customers points balance
我正在尝试编写一个每天 运行 的 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
对于我从未写过的佣金任务,我认为我可以调用 StoreCredit 的方法,如果满足某些条件,该方法会使积分过期,但我不确定这一切是如何工作的
task :expire_credits => :environment do
puts 'Expiring unused credits...'
StoreCredit.expire_credits
puts "done."
end
你调用了class方法但定义了实例方法。您将需要定义 class 方法:
def self.expire_credits
# 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"
Retrieve Record Count Update
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
我正在尝试编写一个每天 运行 的 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
对于我从未写过的佣金任务,我认为我可以调用 StoreCredit 的方法,如果满足某些条件,该方法会使积分过期,但我不确定这一切是如何工作的
task :expire_credits => :environment do
puts 'Expiring unused credits...'
StoreCredit.expire_credits
puts "done."
end
你调用了class方法但定义了实例方法。您将需要定义 class 方法:
def self.expire_credits
# 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"
Retrieve Record Count Update
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