我認爲最好的方法是使用Resque來導入和轉換工作與請求分開。
假設你有一個控制器添加的Excel文件,我會打電話到Information
型號:
class InformationController < ApplicationController
def create
@information = Information.new(params[:information])
if @information.save
resque = Resque.enqueue(ImportDataJob, @information.id)
redirect_to @information, :notice => "Successfully created information for further processing."
else
render :new
end
end
end
你需要做的工作,在這種情況下ImportDataJob
:
class ImportDataJob
def self.perform(information_id)
information = Information.find(information_id)
# convert information.raw_csv or wherever attribute you saved the Excel or CSV into
# and save it into the database where you need to
end
end
您將在Resque RailsCast中找到完整的教程,其中顯示瞭如何將Resque添加到現有的Rails應用程序中。
備註: README和Resque的實際實現之間存在衝突。顯然,他們想要改變Resque被調用的方式(在readme中),但尚未實現。有關更多詳細信息,請參閱此Issue in Github。
喜悅我不沒有看到你對答案的評論......這些都是你想要的嗎? – raviolicode
不,實際上我不想使用Resque。我一直在尋找一些東西,以便csv數據導入到事件中,例如在文件上傳的某個目錄中更新和創建文件。 – Joy
爲什麼不Resque,(或任何工人寶石)?您正在尋找的解決方案將不得不涉及對文件系統的某種輪詢,除非您沒有更好的選擇,否則這是一個糟糕的主意。無論如何,如果你想得到你需要的答案,你可以補充說,你在問題的**更新**部分沒有任何類型的工作人員? – raviolicode