5

我正在尝试通过 Resque 后台作业在后台创建 PDF 文档。

我创建 PDF 的代码位于我想在 Resque 工作人员中使用的 Rails 辅助方法中,例如:

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' 

有人知道怎么做吗?

4

1 回答 1

2

您正在尝试create_pdf从类方法 ( ) 调用实例方法 ( self.perform)。您的代码仅在您DocumentHelper定义create_pdf为类方法时才有效:

def self.create_pdf

如果您不需要create_pdf在视图中访问,则可以考虑将其Document作为实例方法移到您的类中,然后您可以执行@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.

于 2011-06-29T18:21:04.413 回答