訂閱

2017-08-10 132 views
1

我有三個字段activestart_suscriptionend_suscriptionactive is booleanF IT是真實的,因爲訂閱未完成,我的問題是如何使導軌自動將其更改爲模型假'訂閱結束時,在django這很容易但我只是開始與軌道,我不知道。訂閱

回答

2

,我建議你不要使用另一列到「緩存」,它可以很容易地計算出一個信息:

如果刪除列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時間觸發一次)抓取所有現在處於非活動狀態的記錄,並更新其active列。

0

如果活動是數據庫字段,你可以在你的訂閱模式創建一個回調像

before_save :set_active 

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

像吉井先生說:積極不應該是一個數據庫字段。如果是,並且你不想改變它,你應該在每個請求或日常任務中觸摸記錄。

+0

因此,如果我將來做了一個備用,那麼即使它尚未啓動,我也會將「active」屬性設置爲「active」 – MrYoshiji