如何在Ruby on Rails中获取当前的绝对URL?

如何在我的Ruby on Rails视图中获取当前的绝对URL

request.request_uri只返回相对URL。

 答案


对于Rails 3.2或Rails 4+

您应该使用request.original_url获取当前的URL。

这个方法记录在original_url方法中,但如果你好奇,实现是:

def original_url
  base_url + original_fullpath
end

对于Rails 3:

你可以写"#{request.protocol}#{request.host_with_port}#{request.fullpath}",因为request.url现在已被弃用。


对于Rails 2:

你可以写request.url而不是request.request_uri。这将协议(通常为http://)与主机相结合,request_uri为您提供完整的地址。


我认为现在是Ruby on Rails 3.0方法request.fullpath


你可以使用 url_for(:only_path => false)


弃权警告:不推荐使用#request_uri。改为使用完整路径。


如果您使用的是Rails 3.2Rails 4,您应该使用request.original_url获取当前的URL。


该方法的文档位于http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url,但如果您好奇的话,实现方法是:

def original_url
  base_url + original_fullpath
end

您可以在ApplicationController中添加此current_url方法以返回当前URL并允许在其他参数中合并

# 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

用法示例:

current_url --> http://...
current_url(:page=>4) --> http://...&page=4

添加评论

友情链接:蝴蝶教程