rails获取app root/base url

Bru*_*Lin 33 ruby-on-rails rails-routing url-for ruby-on-rails-3

在我的应用程序中,我有一些API在api域下.现在在其中一个API中我想生成一个指向主域的URL,比方说

test.com/blabla...
Run Code Online (Sandbox Code Playgroud)

我试图使用 url_for,但似乎默认的root_urlrequest.host在api域中.Url_for将成为现实

api.test.com/blabla..
Run Code Online (Sandbox Code Playgroud)

虽然我想要它

test.com/blabla...
Run Code Online (Sandbox Code Playgroud)

Url_for可以带参数

host: ...
Run Code Online (Sandbox Code Playgroud)

将它设置为test.com/,问题是如何获取主机的root/base url(test.com)? root_urlrequest.host都是api.test.com.

有任何想法吗?谢谢.

Caf*_*der 55

为了让它对别人有用,我今天遇到了这个

request.base_url
Run Code Online (Sandbox Code Playgroud)

提供本地和现场的完整路径.

request.domain
Run Code Online (Sandbox Code Playgroud)

只给出了域名,所以它有时会在重定向时打破链接

  • 我得到'NameError:未定义的局部变量或方法'请求'为main:Object`这两个. (4认同)

Tom*_*ats 25

根据这个,你可以做到request.domain


Kal*_*lah 11

最简单的替代方法:

包括你在课堂上

include Rails.application.routes.url_helpers
Run Code Online (Sandbox Code Playgroud)

创建函数或只是root_url用来获取应用程序root/base url:

  def add_host_prefix(url)
    URI.join(root_url, url).to_s
  end
Run Code Online (Sandbox Code Playgroud)

最后:添加

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

在:

Your_project_root_deir/config/environments/development.rb

虽然助手只能在视图中访问,但这是有效的解决方案.

  • 对于没有请求对象的情况,这有一些用处.这里的一大缺点是`include Rails.application.routes.url_helpers`是非常昂贵的. (2认同)