【问题标题】:Rails views helper don't seems to work with render_to_stringRails 视图助手似乎不适用于 render_to_string
【发布时间】:2020-02-26 23:28:16
【问题描述】:

我尝试使用 gem 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 中呈现页面,则页面可以正常工作) 如果有人可以帮助我!

【问题讨论】:

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


    【解决方案1】:

    很遗憾,使用 render_to_string 不会让您访问 Rails URL 帮助程序。一种解决方法是将它们直接包含在locals 中,您可以使用url: Rails.application.routes.url_helpers 之类的方式将它们传递到PDF 模板中:

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

    希望能满足您的需求!

    【讨论】:

    • 感谢上帝!我会检查这个
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2011-07-16
      • 2014-07-13
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      相关资源
      最近更新 更多