我正在尝试通过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'
任何人都知道怎么做?
答案 0 :(得分: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
,而不是{{1}}。