link_to url helper在Rails 4的render_to_string中不起作用

时间:2015-05-03 20:29:36

标签: ruby-on-rails-4

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

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

    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

1 个答案:

答案 0 :(得分:0)

尽管这个问题已有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'