我正在尝试找出计算用户订阅剩余天数的正确方法。
例如,用户在2013年12月25日签约一个月,并于2013年12月29日取消订阅。即使他在订阅4天后取消订阅,他的订阅应该在接下来的27天(以月为基准的31天)在计划A上运行。
我想我应该使用created_at和updated_at的订阅模式。到目前为止,我得到了
**机型: subscription.rb
class Subscription < ActiveRecord::Base
before_save :set_expiry_date
def set_expiry_date
@remaining_days = Subscription.calculate(:created_at - Date.today)
Subscription.expiry = '@remaining_days'
Subscription.save
end
end
类似的东西,但我在这里遗漏了一些东西,这可能是一种丑陋的方法。我猜这能帮助任何人理解我在找什么。
然后,我会在每天23:59以cron的身份运行一次rake,从其中的Subscription.expiry数字中删除1(天),当它找到一个0时,它会更新一些东西。虽然这是另一个问题,但是我把关于rake cron的东西放在这里,所以你可以看到我的目标。
发布于 2014-01-08 05:17:32
如果这是我的项目,我会采取不同的方法。我会将订阅到期时间设置为实际到期日期,而不是递减整数。这使得cron的工作更少,而且感觉像是很好的约会实践。。。您可以在到期后保留到期日期,这对于以后的数据分析可能很方便。如果您的程序中存在bug或cron无法运行怎么办?通过保持日期,您可以做一些详细的家庭作业,或者针对特定的队列重新运行您的crons。
如果我需要知道UI或API响应的订阅还有多少天,我可以在subscription类上调用一个类似于下面的remaining_days方法的方法:
def set_expiry_date
#automatically adds a month
#http://ruby-doc.org/stdlib-2.1.0/libdoc/date/rdoc/Date.html#method-i-next_month
Subscription.expiry_date = Subscription.created_at.next_month
Subscription.save
end
def remaining_days
expired? ? 0 : (Date.today - Subscription.expiry_date).to_i
end
def expired?
(Date.today - Subscription.expiry_date).to_i <= 0
end
def expired_today?
Date.today == Subscription.expiry_date
end
然后,我的日常cron在到期时会做一些事情(发送电子邮件恳求客户回来?)将只查找expired_today所在位置的订阅?== true。然后,我的cron还会忽略今天之前过期或尚未过期的订阅。
https://stackoverflow.com/questions/20986922
复制