在我的控制器中,我有一个定义为:
的方法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可以在以后的后台运行该方法。
任何人都知道如何解决这个问题?
答案 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()