ActionView :: Template ::错误:缺少要链接的主机

eme*_*his 22 ruby ruby-on-rails ruby-on-rails-4

正如标题所暗示的,当我尝试link_to在我的邮件模板中使用时,我收到此错误:

ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
Run Code Online (Sandbox Code Playgroud)

我试着遵循它的说明,我也找到了这篇文章,但我仍然得到错误.

我已经尝试添加config.action_mailer.default_url_options = { host: 'example.com' }到以下每个文件,但没有一个工作:

/config/environment.rb
/config/application.rb (inside the module for my app)
/config/development.rb (I'm in development mode)
Run Code Online (Sandbox Code Playgroud)

在Rails 4中有什么变化使得这项工作有所不同吗?

dax*_*dax 37

我前几天遇到了这个问题,这就是为我工作的结果:

Rails.application.routes.default_url_options[:host] = '???'
Run Code Online (Sandbox Code Playgroud)

编辑

这正好在每个环境文件- development.rb,test.rb以及production.rb(如果你有他们更多)与相应的主机名,在每一个

  • config / application.rb是为每种环境(开发,生产,测试等)加载的配置文件。其他文件(例如config / development.rb)将加载相应的环境。因此,这取决于您@Emerson,您可以根据自己的需求/环境进行选择 (2认同)
  • @dax谢谢.这很有效.我很想知道这是什么以及它为什么有效.是否记录在任何地方? (2认同)

Pra*_*thi 11

您需要在每个环境中设置default_url(开发,测试,生产).

您需要进行这些更改.

    config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

 config/environments/test.rb
      config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'

  config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :host => 'your-host-name' }  #if it is local then 'localhost:3000'
Run Code Online (Sandbox Code Playgroud)