如何在静态方法中使用实例方法?我正在尝试异步创建一个文档

时间:2012-09-06 12:19:05

标签: ruby-on-rails ruby

在我的控制器中,我有一个定义为:

的方法
def self.store_pdf(id)
...
end

在该方法中,我需要调用render_to_string来呈现正确的文件/布局:

render_to_string(
    :action => "../view/current_version/show.pdf.erb", 
    :layout => false)

但是因为render_to_string既是实例方法又是受保护的,我需要执行以下操作:

me = self.new # self is the cortroller
me.send(:render_to_string,
    :action => "../view/current_version/show.pdf.erb", 
    :layout => false)

但是有依赖项,例如render_to_string需要工作的响应对象,如下所示:http://apidock.com/rails/ActionController/Base/render_to_string

所以,我开始添加它们

me.send(:response=,  ActionController::Response.new)

但是,需要定义越来越多的全局实例变量,并且我认为只是试图让一个静态方法起作用太多了。

该方法需要是静态的,以便delayed_job可以在以后的后台运行该方法。

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果你没有使用任何rails helper,你可以通过ERB读取erb。如果你使用任何rails helper,那么包括Rails helper。 您可以使用here

进行推荐
require 'erb'
class PdfRender
 #include ActionView::Helpers::OutputSafetyHelper
 #include helper if any is present any
 def self.render_pdf(id)
  #set any instance variable if you are using in pdf 
  content = File.read('path/of/erb/template')
  template = ERB.new(content) 
  # template content will give you text now you can render or generate pdf
  template_content = template.result(binding)


 end
end 

注意: replace h()CGI.escapeHTML()

。{