我想在rake任务上获取渲染字符串。但是类似new_book_url的网址没有主机。

# on rake
controller = ApplicationController.new.tap do |controller|
  controller.request  = ActionDispatch::Request.new({})
end
p controller.render_to_string('books/index', layout: nil) #=> "<a href=\"http://:/books/new\">New Book URL</a>\n"
p Rails.application.config.action_mailer[:default_url_options] #=> {:host=>"localhost", :port=>3000}
p Rails.application.routes.default_url_options #=> {}

# books/index
<%= link_to 'New Book URL', new_book_url %>


当我设置Rails.application.routes.default_url_options = Rails.application.config.action_mailer[:default_url_options]时,它不起作用...

最佳答案

您需要添加default_url_options作为控制器的实例方法:

controller = ApplicationController.new.tap do |controller|
  controller.request  = ActionDispatch::Request.new({})
  def controller.default_url_options
    host = {'production' => 'production.example.org', 'development' => 'development.example.org'}[Rails.env]
    {host: host}
  end
end
p controller.render_to_string('books/index', layout: nil)

关于ruby-on-rails - 如何在rake上设置默认主机?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31853498/

10-12 12:56
查看更多