How do I get the current absolute URL in Ruby on Rails?
如何在RubyonRails视图中获取当前的绝对URL?
对于轨道3.2或轨道4+
您应该使用
这个方法是在原始的URL方法中记录的,但是如果您好奇的话,实现是:
1 2 3 | def original_url base_url + original_fullpath end |
轨道3:
您可以编写
你可以写
我认为RubyonRails3.0方法现在是
你可以用
拒绝警告:不推荐使用请求URI。改为使用完整路径。
如果您使用的是Rails 3.2或Rails 4,那么应该使用
该方法的文档位于http://api.rubyonrails.org/classes/actiondispatch/request.html method-i-original_url,但如果您对该方法感兴趣,则实现为:
1 2 3 | def original_url base_url + original_fullpath end |
您可以在ApplicationController中添加此当前的URL方法以返回当前的URL并允许合并其他参数。
1 2 3 4 5 6 | # https://x.com/y/1?page=1 # + current_url( :page => 3 ) # = https://x.com/y/1?page=3 def current_url(overwrite={}) url_for :only_path => false, :params => params.merge(overwrite) end |
示例用法:
1 2 | current_url --> http://... current_url(:page=>4) --> http://...&page=4 |
对于Ruby on Rails 3:
1 2 | request.url request.host_with_port |
我启动了一个调试器会话并查询了请求对象:
1 | request.public_methods |
在Ruby on Rails 3.1.0.rc4中:
1 | request.fullpath |
我需要应用程序的URL,但需要子目录。我用过:
1 | root_url(:only_path => false) |
1 | url_for(params) |
您可以轻松地添加一些新参数:
1 | url_for(params.merge(:tag =>"lol")) |
我认为request.domain可以工作,但是如果你在blah.blah.com这样的子目录中呢?类似这样的事情可能会奏效:
1 | <%= request.env["HTTP_HOST"] + page ="/" + request.path_parameters['controller'] +"/" + request.path_parameters['action'] %> |
根据路径结构更改参数。
希望有帮助!
看起来
1 | Using #request_uri is deprecated. Use fullpath instead. |
使用Ruby1.9.3-p194和RubyonRails 3.2.6:
如果request.fullpath不适合您,请尝试request.env["http_referer"]
下面是我的故事。
我在检测当前URL(显示在浏览器中用户的地址栏中)时遇到了类似的问题,因为累积页面合并了来自不同控制器的信息,例如
用户可以切换到不同类型的问题列表。所有这些列表都是通过Ajax从不同的控制器/部分加载的(不需要重新加载)。
问题是在列表的每个项目中为后退按钮设置正确的路径,以便后退按钮在其自己的页面和累积页面历史记录中都能正常工作。
如果我使用request.fullpath,它将返回最后一个javascript请求的路径,这绝对不是我要查找的URL。
所以我使用了request.env["http_referer"],它存储最后一个重新加载的请求的URL。
这是部分的一个节选来做决定
1 2 3 4 5 6 | - if request.env["HTTP_REFERER"].to_s.scan("history").length > 0 - back_url = user_history_issue_path(@user, list:"needed_type") - else - back_url = user_needed_type_issue_path(@user) - remote ||= false =link_to t("static.back"), back_url, :remote => remote |
这适用于RubyonRails3.0,并且应该得到大多数RubyonRails版本的支持:
1 | request.env['REQUEST_URI'] |
线程中的所有建议都没有给我带来可悲的帮助,除了有人说他使用调试程序来查找所需内容的建议。
我创建了一些自定义错误页,而不是标准404和500,但是
我需要使用的是
1 | request.original_url |
您可以使用Ruby方法:
1 | :root_url |
它将获得基本URL的完整路径:
1 | localhost:3000/bla |
如果是相对的,你的意思是没有这个域,那么看看
1 | (url_for(:only_path => false) =="/" )? root_url : url_for(:only_path => false) |
在Rails 3中,您可以使用
1 | request.original_url |
http://apidock.com/rails/v3.2.8/actionspatch/request/original_url
钢轨4
您可以使用
1 2 3 | get"/articles?page=2" request.original_url # =>"http://www.example.com/articles?page=2" |
如果你想明确,意思是,你知道你需要的路径:
1 | link_to current_path(@resource, :only_path => false), current_path(@resource) |
轨道3:
request.fullpath
您可以对Rails 3.2使用任何一个:
1 2 3 4 5 | request.original_url or request.env["HTTP_REFERER"] or request.env['REQUEST_URI'] |
我想在任何地方都能用
1 | "#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}" |
获取不带任何查询参数的请求URL。
1 2 3 | def current_url_without_parameters request.base_url + request.path end |
你也可以用
1 | request.original_url |
或
1 | "#{request.protocol}#{request.host_with_port}" |
获取当前URL。
对于轨道3.2或轨道4以这种方式获取"request.originalu url"参考:原始URL方法
铁路3不推荐使用as request.url。我们可以通过连接
1 | "#{request.protocol}#{request.host_with_port}#{request.fullpath}" |
铁路2
1 | request.url |
1 | request.env["REQUEST_URI"] |
在经过测试的Rails 2.3.4中工作,不了解其他版本。
你可以使用:
1 | request.full_path |
或
1 | request.url |
希望它能解决你的问题。
干杯
你可以给
对于Rails 3.x及更高版本:
1 | #{request.protocol}#{request.host_with_port}#{request.fullpath} |
对于轨道3.2及以上:
1 | request.original_url |
因为在Rails 3.2及更高版本中:
1 | request.original_url = request.base_url + request.original_fullpath |
有关更多信息,请访问http://api.rubyonrails.org/classes/actiondispatch/request.html method-i-original_url
钢轨4
控制器:
1 2 3 | def absolute_url request.base_url + request.original_fullpath end |
action mailer 4.2版本中的显著变化:
链接到和url,默认情况下在模板中生成绝对URL,不再只需要传递路径:false。(提交)
观点:
如果使用
1 | <%= link_to"Home", root_url %> |
有关详细信息,请访问:
http://blog.grepruby.com/2015/04/absolute-url-full-url-in-rails-4.html
要获得绝对URL,这意味着
1 | <%= link_to 'Edit', edit_user_url(user) %> |
用户的URL助手生成一个包含协议和主机的URL姓名。用户的路径助手只生成路径部分。
1 2 | users_url: http://localhost/users users_path: /users |
您可以通过调用以下命令获取绝对URL:
1 | request.original_url |
或
1 | request.env['HTTP_REFERER'] |