0

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

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 稍后可以在后台运行该方法。

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

4

1 回答 1

1

如果您没有使用任何 rails helper,您可以通过 ERB 读取 erb,如果您使用任何 rails helper,则包括 Rails helper。您可以参考使用这里

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()

于 2012-09-06T12:33:50.440 回答