ruby-on-rails - rails - rake routes




如何在Ruby on Rails中獲取當前的絕對URL? (20)

對於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視圖中獲取當前的絕對URL

request.request_uri只返回相對的URL。


Rails 4.0

你可以使用request.original_url ,輸出將如下例所示

get "/articles?page=2"

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

你可以使用

request.original_url 

要么

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

獲取當前網址。


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


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

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

我認為它會在任何地方工作

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

你可以設置一個變量為URI.parse(current_url) ,我沒有在這裡看到這個提議,它適用於我。



在Ruby on Rails 3.1.0.rc4中:

 request.fullpath

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

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


對於Ruby on Rails 3:

request.url
request.host_with_port

我啟動了一個調試器會話並查詢請求對象:

request.public_methods

對於導軌3:

request.fullpath


您可以在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

我認為Ruby on Rails 3.0方法現在是request.fullpath


我需要的應用程序的URL但與子目錄。 我用了:

root_url(:only_path => false)


看起來request_uri在Ruby on Rails 3中已被棄用。

Using #request_uri is deprecated. Use fullpath instead.

要獲取絕對URL,這意味著from the root可以像這樣顯示

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

users_url助手會生成一個包含協議和主機名的URL。 users_path助手只生成路徑部分。

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

 url_for(params)

您可以輕鬆添加一些新參數:

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

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




url