Rails - 如何在布局中找到域url

Bob*_*zza 7 ruby ruby-on-rails ruby-on-rails-3

我曾经request.env['http_host']在localhost上工作,但是在heroku的布局页面中引用它会导致错误.

此请求在视图中工作并显示正确的基本URL,但在将代码移动到布局时会导致错误.注意 - 我正在使用它为html电子邮件中的图像构建绝对URL.

  <%= "#{request.env['HTTP_HOST']}/assets/email_header_image.png" %> 
  <%= image_tag "#{request.env['HTTP_HOST']}/assets/email_header_image.png" %>
Run Code Online (Sandbox Code Playgroud)

收到错误:

ActionView::Template::Error (undefined method `env' for nil:NilClass):
Run Code Online (Sandbox Code Playgroud)

Cas*_*lho 15

如果您想要没有端口的主机,只需使用:

request.host
Run Code Online (Sandbox Code Playgroud)

编辑:哎呀,我刚刚注意到你正在使用视图中的代码.我不知道它是否在那里可见,我只在控制器中使用它,但通过设置实例变量可以很容易地克服它.

  • `request`也应该出现在视图中,就像在给出的例子中一样. (2认同)

Mar*_*tez 5

  1. 在控制器中,将实例变量设置为等于主机:
    • @host = request.host
  2. 在您的视图中,使用引用实例变量
    • <%= @host %>