只是在這裏猜測,但你是否在尋找訂閱已過期? 如果是這樣,我會建議,而不是做你的計劃,改變你的應用程序從一開始就存儲失效日期。您可以輕鬆編寫遷移以添加到期日期列並現在填寫,然後您可以添加一個非常簡單的範圍來檢查訂閱是否已過期。
遷移:
add_column :subscriptions, :expiry_date, :datetime
Subscription.reset_column_information
Subscription.all.each do |subscription|
duration = 0
switch subscription.interval
case 'year'
duration = subscription.duration * 365
case 'month'
duration = subscription.duration * 30
case 'week'
duration = subscription.duration * 7
end
subscription.update_attribute(:expiry_date, subscription.created_at + duration.days)
end
型號:
scope :expired, lambda{ where("expiry_date <= ?", Time.now) }
你想這樣做,作爲驗證保存記錄之前?爲什麼是where子句? – cortex
@cortex我想選擇created_at是1個月前的記錄(或3年前或2周前).interval可以是周,月或年。 – shajin