订阅ruby on rails

时间:2017-08-10 17:50:13

标签: ruby-on-rails ruby

我有一个包含三个字段的模型activestart_suscriptionend_suscriptionactive is boolean和i f这是因为订阅尚未完成< / strong>,我的问题是如何在订阅结束时让rails自动将其更改为false`,在django中它很容易但我只是从rails开始并且我不知道。

2 个答案:

答案 0 :(得分:2)

我建议您不要使用其他列来缓存&#34;一个易于计算的信息:

如果删除列active,则可以通过定义实例方法active?来确定单个记录是否处于活动状态:

# in your model
def active?(as_of_date = Date.current)
  (start_suscription..end_suscription).include?(as_of_date)
end
# usage
instance = YourModel.new(start_suscription: Date.yesterday, end_suscription: Date.tomorrow)
instance.active? # => true
instance.active?(Date.current + 1.week) # => false

要获取所有有效记录,请创建范围:

scope :active, -> (as_of_date = Date.current) { where('? BETWEEN start_suscription AND end_suscription', as_of_date) }
# usage
YourModel.active
YourModel.active(Date.yesterday)

如果你想坚持你的缓存专栏(我强烈反对),你需要一个工人(每X次触发一次)来抓取所有现在不活动的记录并更新他们的{{1} }专栏。

答案 1 :(得分:0)

如果“活动”是数据库字段,则可以在订阅模型中创建回调,例如

before_save :set_active

def set_active
self.active = self.start_subscription >= Date.today and self.end_suscription <= Date.today
end

像yoshii先生所说,活跃不应该是数据库领域。如果是,并且您不想更改它,您应该在每个请求或日常任务中触摸记录。