2014-02-26 37 views
1

如何在delete之後的某個對象某個時間之後是createdRails:創建後10分鐘後刪除對象?

我以爲它會是什麼樣的?但我該如何安排這一行動?

after_create :destroy_essay 

    def destroy_essay 
    # 10minutes later 
    # self.destroy 
    end 

回答

1

這實際上是後臺工作一個完美的工作。我肯定會推薦使用Sidekiq它甚至可以提供一種在未來的一定時間內完成工作的方法。 https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs

EssayDestroyer.perform_at(10.minutes.from_now) 

在您EssayDestroyer工人你然後寫代碼來執行銷燬您創建的文章。

0

你或許應該寫這個rake任務,並使用cron,或者如果你在Heroku,Heroku的調度運行它。

在模型中添加一個作用域,例如expired,它返回10分鐘以前的所有項目,然後在耙子任務執行Essay.expired.destroy_all並運行此任務,例如每隔一分鐘。

這耙可以是這樣的:

namespace :app do 
    desc "Remove expired essays" 

    task :remove_expired_essays => :environment do 
    Essay.expired.destroy_all 
    end 
end 

,並在模型範圍:

scope :expired, -> { where('created_at >= ?', 10.minutes.ago) }