在哪里为Rails.application.routes.url_helpers设置主机

时间:2016-04-22 11:11:58

标签: ruby-on-rails

在控制器中,我称之为服务:

MyService.call

MyService.call方法中,我想使用网址助手:

Rails.application.routes.url_helpers.something_url

然而,我收到错误:

Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
在config / environments / development.rb中的

我有:

config.action_mailer.default_url_options = { host: 'localhost:3000' }
config.action_controller.default_url_options = { host: 'localhost:3000' }

我应该设置什么不得错误?

2 个答案:

答案 0 :(得分:10)

您可以将配置文件中的主机设置为:

Rails.application.routes.default_url_options[:host] = 'your_host'

这不仅会为action_maileraction_controller设置默认主机,而且会为使用url_helpers的任何内容设置默认主机。

答案 1 :(得分:5)

根据this thread,每当使用路线助手时,他们都不会将default_url_options推迟到ActionMailerActionController配置,并且预计会有类中的default_url_options方法。这对我有用:

class MyService
  include Rails.application.routes.url_helpers

  def call
    something_url
  end

  class << self
    def default_url_options
      Rails.application.config.action_mailer.default_url_options
    end
  end
end

请注意,您可以使用action_maileraction_controller配置,具体取决于您配置的内容。