2010-03-24 63 views
7

我有一個控制器操作,生成一些excel報告,這需要大約10分鐘的時間。有時我從我的webapp中調用它,這就是爲什麼它是一個動作。如何從rake任務調用控制器操作?

但我也想創建一個rake任務來運行它,所以我可以安排它自動運行一次。

任何方式來做到這一點?

+0

正如其他人所說的,您必須將代碼移到模型中。在控制器上完成的東西是一種不好的做法。 – kikito 2010-03-25 08:52:45

回答

3

您可以處理模型中的報告生成嗎?模型should be doing most of the work anyway,可以從Rake任務訪問:

task :reports => :environment do 
    ... 
    # Do stuff with your models. 
end 
+1

我不這麼認爲,我需要渲染XML模板來生成excel報告 – Janak 2010-03-24 13:25:14

3

我認爲你必須將你的代碼移入你的模型。由於在模型中使用輸出渲染的知識並不好,因此我建議將所有業務邏輯和數據操作放入模型中,然後將渲染代碼放入您的rake任務中。這將使耙子任務類似於網絡上使用的控制器 - 保持關注點分離。

你可以看看ActionView :: Base並從那裏開始工作,找出如何觸發模板的渲染。