2011-06-29 58 views
4

我想通過Resque後臺作業在背景中創建一個PDF文檔。在resque背景下使用蝦生成pdf

我創建的PDF的代碼是,我想在Resque工人像使用Rails的helper方法:

class DocumentCreator 
    @queue = :document_creator_queue 
    require "prawn" 

    def self.perform(id) 
    @doc = Document.find(id) 

    Prawn::Document.generate('test.pdf') do |pdf| 
     include ActionView::Helpers::DocumentHelper 
     create_pdf(pdf) 
    end 
    end 
end 

create_pdf方法是從DocumentHelper,但我收到此錯誤:

undefined method `create_pdf' 

任何人都知道如何做到這一點?

回答

2

您試圖從類方法(self.perform)調用實例方法(create_pdf)。

def self.create_pdf 

如果您不需要訪問您的意見create_pdf,你可能會考慮將其移動到您的Document類,而不是作爲一個實例方法:如果你的DocumentHelper定義create_pdf爲類方法的代碼只會工作,然後你可以做@doc.create_pdf(pdf)

然而,如果你需要訪問你的意見create_pdf還有,你可以把一個module_function :create_pdfDocumentHelper文件中,也可以動態地添加這在你的工人:

DocumentHelper.module_eval do 
    module_function(:create_pdf) 
end 
DocumentHelper.create_pdf(pdf) 

然後就可以正常致電DocumentHelper.create_pdf。另外,在Rails 3中,我認爲你只需要include DocumentHelper,而不是include ActionView::Helpers::DocumentHelper