Rails视图助手似乎不适用于render_to_string

时间:2019-10-31 14:59:42

标签: ruby-on-rails ruby rendering wkhtmltopdf wicked-pdf

我尝试使用wicked_pdf宝石将Rails视图转换为pdf。 但是当我做这样的render_to_string

ActionController::Base.new.render_to_string(template: "templates/pdf_meteo.html.erb", locals: {communaute_meteo_id: id}, layout: 'pdf')

诸如user_path之类的方法不起作用并返回未定义的方法错误...(请注意,如果我用html呈现该页面,则该页面可以正常工作) 如果有人可以帮助我!

2 个答案:

答案 0 :(得分:1)

不幸的是,使用render_to_string不能使您访问Rails URL帮助器。一种解决方法是使用locals之类的东西将它们直接包含在您传递到PDF模板的url: Rails.application.routes.url_helpers中:

ActionController::Base.new.render_to_string(
  template: "templates/pdf_meteo.html.erb",
  locals: {url: Rails.application.routes.url_helpers, communaute_meteo_id: id}
  layout: 'pdf'
)

然后在您的PDF模板中,您可以使用以下名称进行调用:

url.user_path

请记住,默认情况下,_path URL帮助器将是相对,而不是绝对路径。您可以改用_url版的帮助程序,并以几种不同的方式为他们设置host。您可以为整个应用程序全局配置它们:

# config/environments/development.rb
Rails.application.routes.default_url_options[:host] = 'www.mysite.com'

或在PDF模板中的每个帮助器上分别设置它们:

url.user_url(host: 'www.mysite.com')

希望能满足您的需求!

答案 1 :(得分:0)

最简单的方法是使用常规的Rails渲染流程-使用视图文件your_action_name.pdf.erb,窍门是覆盖部分元素的formats

<%= render partial:"some_partial", formats:[:html] %>

另外,您可以在控制器的上下文中运行render_to_string来获得帮助者(因为ActionController::Base对您的应用一无所知)