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_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

于 2011-06-29T18:21:04.413 に答える