在背景中使用虾生成pdf救援

时间:2011-06-29 17:59:38

标签: ruby-on-rails resque prawn

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

我创建PDF的代码是在Rails帮助器方法中,我想在Resque工作器中使用,如:

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' 

任何人都知道怎么做?

1 个答案:

答案 0 :(得分:2)

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

def self.create_pdf

如果您不需要在视图中访问create_pdf,则可以考虑将其移至Document课程,作为实例方法,然后您可以执行@doc.create_pdf(pdf)

但是,如果您还需要在视图中访问create_pdf,则可以在module_function :create_pdf文件中放置DocumentHelper,也可以在工作人员中动态添加DocumentHelper.module_eval do module_function(:create_pdf) end DocumentHelper.create_pdf(pdf)

DocumentHelper.create_pdf

然后您可以正确拨打include DocumentHelper

此外,在Rails 3中,我认为您只需要include ActionView::Helpers::DocumentHelper,而不是{{1}}。