[英]How do I get the current absolute URL in Ruby on Rails?
如何在我的 Ruby on Rails 視圖中獲取當前絕對URL?
request.request_uri
只返回相對URL。
您應該使用request.original_url
來獲取當前 URL。 當前 repo 的源代碼可在此處找到。
這個方法記錄在original_url method ,但如果你好奇,實現是:
def original_url
base_url + original_fullpath
end
您可以編寫"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
,因為request.url
現在已棄用。
你可以寫request.url
而不是request.request_uri
。 這結合了協議(通常是 http://)和主機,以及 request_uri 給你完整的地址。
我認為 Ruby on Rails 3.0 方法現在是request.fullpath
。
你可以使用url_for(only_path: false)
棄用警告:不推薦使用#request_uri 。 請改用完整路徑。
如果您使用的是Rails 3.2或Rails 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
編輯: Rails 7 ( Docs ) 仍然是這種情況。
您可以在 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:
request.url
request.host_with_port
我啟動了一個調試器會話並查詢了請求對象:
request.public_methods
在 Ruby on Rails 3.1.0.rc4 中:
request.fullpath
我需要應用程序URL ,但需要子目錄。 我用了:
root_url(:only_path => false)
url_for(params)
您可以輕松添加一些新參數:
url_for(params.merge(:tag => "lol"))
我認為 request.domain 會起作用,但是如果您位於 blah.blah.com 之類的子目錄中怎么辦? 像這樣的東西可以工作:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
根據您的路徑結構更改參數。
希望有幫助!
看起來request_uri
在 Ruby on Rails 3 中已被棄用。
Using #request_uri is deprecated. Use fullpath instead.
使用 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
這適用於 Ruby on Rails 3.0,並且大多數版本的 Ruby on Rails 都應該支持:
request.env['REQUEST_URI']
可悲的是,線程中的任何建議都沒有幫助我,除了有人說他使用調試器來查找他要查找的內容。
我創建了一些自定義錯誤頁面而不是標准的 404 和 500,但request.url
以/404
而不是預期的/non-existing-mumbo-jumbo
結尾。
我需要使用的是
request.original_url
您可以使用紅寶石方法:
:root_url
這將獲得帶有基本 url 的完整路徑:
localhost:3000/bla
如果通過相對,您的意思是沒有域,然后查看request.domain
。
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
在 Rails 3 中,您可以使用
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
您可以將任何一種用於 rails 3.2:
request.original_url
or
request.env["HTTP_REFERER"]
or
request.env['REQUEST_URI']
我認為它會在任何地方工作
"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"
導軌 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。
對於 Rails 3.2 或 Rails 4只需以這種方式獲取 "request.original_url" 參考: 原始 URL 方法
對於 Rails 3由於 request.url 已被棄用。我們可以通過連接獲得絕對路徑
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
對於 Rails 2
request.url
如果你想具體一點,意思是,你知道你需要的路徑:
link_to current_path(@resource, :only_path => false), current_path(@resource)
對於導軌 3:
request.fullpath
request.env["REQUEST_URI"]
在經過測試的 rails 2.3.4 中工作,不知道其他版本。
獲取不帶任何查詢參數的請求 URL。
def current_url_without_parameters
request.base_url + request.path
end
您可以將變量設置為URI.parse(current_url)
,我在這里還沒有看到這個提議,它對我有用。
您可以使用:
request.full_path
或者
request.url
希望它能解決您的問題。
干杯
要獲取絕對 URL,這意味着from the root
可以這樣顯示
<%= link_to 'Edit', edit_user_url(user) %>
users_url 幫助器生成一個包含協議和主機名的 URL。 users_path 助手只生成路徑部分。
users_url: http://localhost/users
users_path: /users
導軌 4
控制器:
def absolute_url
request.base_url + request.original_fullpath
end
Action Mailer 4.2 版本中的顯着變化:
默認情況下,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
對於 Rails 3.x 及更高版本:
#{request.protocol}#{request.host_with_port}#{request.fullpath}
對於 Rails 3.2 及更高版本:
request.original_url
因為在 rails 3.2 及更高版本中:
request.original_url = request.base_url + request.original_fullpath
欲了解更多信息,請訪問http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url
您可以通過調用獲得絕對網址:
request.original_url
或者
request.env['HTTP_REFERER']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.