我有一個名爲expiration_date
的列的Ruby on Rails模型。一旦達到有效期,我想要修改模型上的另一列(例如expired = true
)。有什麼好辦法做到這一點?在特定時間調用模型方法(Ruby on Rails)
理想情況下,我希望在達到失效日期的確切時刻調用模型函數。
我有一個名爲expiration_date
的列的Ruby on Rails模型。一旦達到有效期,我想要修改模型上的另一列(例如expired = true
)。有什麼好辦法做到這一點?在特定時間調用模型方法(Ruby on Rails)
理想情況下,我希望在達到失效日期的確切時刻調用模型函數。
對於您描述的情況,最佳解決方案是使用expired
方法而不是列,如果expiration_date
大於或等於當前日期,則返回true。
對於其他方案,我會使用觸發存儲過程的DB預定事件。該過程將檢查模型表中所有行的expiration_date
列,並相應地更新expired
(或其他(s))列。
你有沒有考慮過使用調度器來自動執行此操作?類似Resque,Delayed Job或Cron會正常工作。
然後在您的計劃任務,你可以有這樣的事情:
if foo.expiration_date < Time.now
foo.is_expired = true
foo.save
end
使用delayed_job
寶石。安裝delayed_job gem後,請執行以下操作:
class Model < ActiveRecord::Base
after_create :set_expiry_timer
# register the timer
def set_expiry_timer
delay(:run_at => expiration_date).expire
end
def expire
update_attribute(:is_expired, true) unless is_expired?
end
end
除了設置'expired = true'之外,還有什麼其他的你想要做的嗎? – 2012-03-29 23:05:32