2012-10-08 16 views
0

我有我的控制,我需要執行內部延遲的工作方法中的方法:執行控制方法與delayed_job的寶石

這是我order controller action

class OrdersController < ApplicationController 

def create 
    #code here 
    order = Order.first 
    Order.delay(queue: "order", priority: 1, run_at: 2.minutes.from_now).expire_order(order) 
end 

def template_expired_order(order) 
    #code here 
end 

end 

這是我order model:

class Order 
    include Mongoid::Document 
    include Mongoid::Timestamps::Created 
    . 
    . 
    . 
    #delayed jobs method 
    def self.expire_order(order) 
    #code here 
    end 
end 

我想執行控制器方法template_expired_order(order)self.expire_order(order)方法是exe cuted或觸發或點燃。

我該怎麼辦?

非常感謝!

回答

1

你不應該在模型相關的代碼在控制器,特別是如果你想運行它在後臺作業。目前還不清楚template_expired_order的作用,但我建議將它放在Order模型中,並直接調用它以獲得傳入expired_order的順序。

class Order 
    def expire_order(order) 
    order.template_expired_order 
    end 

    def template_expired_order 
    # code 
    end 
end 
+0

謝謝。我的問題是,'template_expired_order'方法已呈現部分爲:'def template_expired_order render_to_string:partial =>'job_has_expired',::locals => {:order => order}} end'我不知道是否delayed_job掛鉤對此有效case ... – hyperrjas

+0

你爲什麼要在後臺工作中渲染一個部分? –

+0

當delayed_job方法執行時,我需要將這部分內容保存在我的數據庫中 – hyperrjas