提问



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


request.request_uri仅返回相对URL。

最佳参考


对于Rails 3.2或Rails 4 +



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


这个方法记录在original_url方法中,但是如果你很好奇,那么实现是:[54]


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则为您提供完整的地址。

其它参考1


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

其它参考2


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

其它参考3


弃用警告:不推荐使用#request_uri。请改用完整路径。 [55]

其它参考4


如果您正在使用 Rails 3.2 Rails 4 ,则应使用request.original_url获取当前网址。





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


def original_url
  base_url + original_fullpath
end

其它参考5


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


# 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

其它参考6


对于Ruby on Rails 3:


request.url
request.host_with_port


我启动了调试器会话并查询了请求对象:


request.public_methods

其它参考7


在Ruby on Rails 3.1.0.rc4中:


 request.fullpath

其它参考8


我需要应用程序URL但是需要子目录。我用过:[58]


root_url(:only_path => false)

其它参考9


 url_for(params)


您可以轻松添加一些新参数:


url_for(params.merge(:tag => "lol"))

其它参考10


我认为request.domain可以工作,但是如果你在像blah.blah.com这样的子目录中呢?这样的东西可以工作:


<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>


根据路径结构更改参数。


希望有所帮助!

其它参考11


在Ruby on Rails 3中看起来request_uri已被弃用。


Using #request_uri is deprecated. Use fullpath instead.

其它参考12


这适用于Ruby on Rails 3.0,并且应该受到大多数Ruby on Rails版本的支持:


request.env['REQUEST_URI']

其它参考13


使用Ruby 1.9.3-p194和Ruby on Rails 3.2.6:


如果 request.fullpath 对您不起作用,请尝试 request.env [[HTTP_REFERER]]


这是我下面的故事。


我在检测当前URL(在浏览器中显示用户地址栏中)时遇到了类似的问题,累积页面结合了来自不同控制器的信息,例如http://localhost:3002/users/1/history/issues


用户可以切换到不同类型的问题列表。所有这些列表都是通过Ajax从不同的控制器/部分加载的(无需重新加载)。


问题是在列表的每个项目中为后退按钮设置正确的路径,以便后退按钮可以在其自己的页面和累积页面历史记录中正常工作。


如果我使用 request.fullpath ,它会返回上一个JavaScript请求的路径,这绝对不是我正在寻找的URL。


所以我使用 request.env [[HTTP_REFERER]] 来存储上次重新加载的请求的URL。


这是部分做出决定的摘录


- 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

其它参考14


线程中的所有建议都没有让我伤心,除了有人说他使用调试器找到他所寻找的东西。


我已经创建了一些自定义错误页面而不是标准的404和500,但request.url结束于/404而不是预期的/non-existing-mumbo-jumbo


我需要使用的是


request.original_url

其它参考15


如果是亲戚,你的意思是没有域名,那么请查看request.domain

其它参考16


你可以使用ruby方法:


:root_url


这将获得基本网址的完整路径:


localhost:3000/bla

其它参考17


(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)

其它参考18


在Rails 3中,您可以使用


request.original_url


http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url[59]

其它参考19


Rails 4.0


您可以使用request.original_url,输出将如下面给出的示例


get "/articles?page=2"

request.original_url # => "http://www.example.com/articles?page=2"

其它参考20


如果你想具体,意思是,你知道你需要的道路:


link_to current_path(@resource, :only_path => false), current_path(@resource)

其它参考21


对于导轨3:



  request.fullpath


其它参考22


你可以使用任何一个rails 3.2:


request.original_url
or
request.env["HTTP_REFERER"]
or
request.env['REQUEST_URI']


我认为它将适用于所有地方


"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"

其它参考23


request.env["REQUEST_URI"]


在rails 2.3.4中测试过,并且不了解其他版本。

其它参考24


获取没有任何查询参数的请求URL。


def current_url_without_parameters
  request.base_url + request.path
end

其它参考25


你可以使用


request.original_url 


要么


"#{request.protocol}#{request.host_with_port}" 


获取当前的URL。

其它参考26


您可以使用:


request.full_path


要么


request.url


希望它能解决你的问题。


干杯

其它参考27


您可以将变量设置为URI.parse(current_url),我现在还没有看到此提案,它对我有用。

其它参考28


要获得绝对URL,这意味着from the root可以像这样显示


<%= link_to 'Edit', edit_user_url(user) %>


users_url助手生成包含协议和主机的URL
名称。 users_path帮助程序仅生成路径部分。


users_url: http://localhost/users
users_path: /users

其它参考29


Rails 4


控制器:


def absolute_url
  request.base_url + request.original_fullpath
end


动态邮件程序4.2版本中的显着变化: [60]


link_to和url_for默认情况下在模板中生成绝对URL,不再需要传递only_path:false。 (承诺)


视图:


如果使用_url后缀,则生成的URL是绝对的。使用_path获取相对URL。


<%= link_to "Home", root_url %>


有关详细信息,请访问:


http://blog.grepruby.com/2015/04/absolute-url-full-url-in-rails-4.html[61]