【问题标题】:link_to url helper not working in render_to_string for Rails 4link_to url helper 在 Rails 4 的 render_to_string 中不起作用
【发布时间】:2015-05-03 20:29:35
【问题描述】:

我试图让 link_to 在控制器外部渲染视图时工作。我尝试了在互联网上找到的几种不同的解决方案。你可以看到一个尝试被注释掉了。

它不断导致:nil:NilClass 的未定义方法 `host'

    ac = ApplicationController.new
    ac.class.include Rails.application.routes.url_helpers

    #context = Rails.configuration.paths['app/views']
    #view = ActionView::Base.new(context)
    #view.class.include Rails.application.routes.url_helpers
    #view.render :layout => 'layouts/pdf.html.haml', :template => 'reports/show.pdf.haml', locals: {alerts:@alerts}

    ac.render_to_string(:layout => 'layouts/pdf.html.haml', :template => 'reports/show.pdf.haml', locals: {alerts:@alerts})

我也尝试过骑车。 ActionView::Base 的东西似乎都不起作用。

class ViewRenderer < ActionView::Base
  include Rails.application.routes.url_helpers
  include ApplicationHelper

  def default_url_options
     {host: Rails.application.routes.default_url_options[:host]}
  end
end

【问题讨论】:

  • 我最终不得不将助手扩展为 ActionView::Base 的实例
  • 你能详细说明一下吗?我正在尝试将部分(包含link_to)呈现为字符串并收到错误:ActionView::Template::Error: arguments passed to url_for can't be handled. Please require routes or provide your own implementation

标签: ruby-on-rails-4


【解决方案1】:

虽然这个问题已经有 4 年的历史了,但我还是回答了 a similar question,我认为这里可以提供帮助。

一种选择是将 URL 帮助程序直接包含在传递给模板的 locals 中:

ac.render_to_string(
  layout: 'layouts/pdf.html.haml',
  template: 'reports/show.pdf.haml',
  locals: {url: Rails.application.routes.url_helpers, alerts: @alerts}
)

然后在您的模板中,您可以在明确设置主机的情况下调用它们:

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

或者您可以为整个应用全局配置主机:

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

【讨论】:

    【解决方案2】:

    在 Rails 5 中,您可以只使用 ApplicationController.render:

    ApplicationController.render(layout: 'layouts/pdf.html.haml', template: 'reports/show.pdf.haml', locals: {alerts: @alerts})
    

    另请参阅 GitHub 上的 this comment

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2014-09-10
      相关资源
      最近更新 更多