【问题标题】:generating pdf using prawn in background with resque在 resque 的背景下使用虾生成 pdf
【发布时间】:2011-06-29 17:59:38
【问题描述】:

我正在尝试通过 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' 

有人知道怎么做吗?

【问题讨论】:

    标签: ruby-on-rails resque prawn


    【解决方案1】:

    您正在尝试从类方法 (self.perform) 调用实例方法 (create_pdf)。仅当您的 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了。

    另外,在 Rails 3 中,我认为您只需要 include DocumentHelper,而不是 include ActionView::Helpers::DocumentHelper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多