Ruby on Railsのビューで現在の 絶対URL を取得する方法を教えてください。
request.request_uri
は相対URLのみを返します。
現在のURLを取得するにはrequest.original_url
を使用してください。
このメソッドは original_urlメソッド で文書化されていますが、興味があれば、実装は次のようになります。
def original_url
base_url + original_fullpath
end
"#{request.protocol}#{request.Host_with_port}#{request.fullpath}"
は現在推奨されていないので、request.url
を書くことができます。
request.url
の代わりにrequest.request_uri
を書くことができます。これはプロトコル(通常はhttp://)とHost、そしてrequest_uriを組み合わせてあなたに完全なアドレスを与えます。
私はRuby on Rails 3.0メソッドがrequest.fullpath
になったと思います。
url_for(:only_path => false)
を使うことができます
非推奨警告: #request_uriの使用は推奨されません 。代わりにフルパスを使用してください。
Rails 3.2 または Rails 4 を使用している場合は、現在のURLを取得するにはrequest.original_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
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"]を試してください。
これが私の物語です。
私はhttp://localhost:3002/users/1/history/issues
のように、異なるコントローラーからの情報を組み合わせた累積ページの現在のURL(彼女のブラウザーのユーザーのアドレスバーに表示される)を検出することで同様の問題を抱えていました。
ユーザーは、さまざまな種類の問題の一覧に切り替えることができます。これらのリストはすべて、(リロードせずに)異なるコントローラ/パーシャルからAjaxを介してロードされます。
問題は、リストの各項目に戻るボタンの正しいパスを設定して、戻るボタンがそれ自体のページと累積ページの両方で正しく機能するようにすることでした。 history 。
私がrequest.fullpathを使った場合、それは最後のJavaScriptリクエストのパスを返します。
そのため、最後にリロードしたリクエストのURLを格納するrequest.env ["HTTP_REFERER"]を使用しました。
これは、決定を下すためのパーシャルからの抜粋です。
- 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
もし親戚であれば、ドメインがないことを意味しているのであれば、request.domain
を調べてください。
Rubyメソッドを使うことができます:
:root_url
これはベースURLでフルパスを取得します。
localhost:3000/bla
(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 4.0
あなたはrequest.original_url
を使うことができます、出力は下記の例のようになります
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
もしあなたが具体的になりたいのであれば、あなたはあなたが必要とする道を知っています:
link_to current_path(@resource, :only_path => false), current_path(@resource)
どちらでも使えます
request.original_url
または
"#{request.protocol}#{request.Host_with_port}"
現在のURLを取得します。
レール3の場合:
request.fullpath
Rails 3.2またはRails 4の場合 単に「request.original_url」のようにしてください。参照: オリジナルのURLメソッド
Rails 3の場合 request.urlは廃止予定です。連結することで絶対パスを取得できます。
"#{request.protocol}#{request.Host_with_port}#{request.fullpath}"
レール2の場合
request.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}"
クエリパラメータなしでリクエストURLを取得します。
def current_url_without_parameters
request.base_url + request.path
end
request.env["REQUEST_URI"]
rails 2.3.4で動作し、他のバージョンについては知りません。
あなたが使用することができます:
request.full_path
または
request.url
うまくいけば、それはあなたの問題を解決するでしょう。
乾杯
あなたは変数をURI.parse(current_url)
に設定することができます、私はまだここでこの提案を見ていません、そしてそれは私のために働きます。
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 をご覧ください。
レール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は絶対パスです。相対URLを取得するには_path
を使用してください。
<%= link_to "Home", root_url %>
詳細については、にアクセスしてください。
http://blog.grepruby.com/2015/04/absolute-url-full-url-in-Rails-4.html
from the root
という絶対URLを取得するには、このように表示できます。
<%= link_to 'Edit', edit_user_url(user) %>
Users_urlヘルパーはプロトコルとホスト名を含むURLを生成します。 users_pathヘルパーはパス部分のみを生成します。
users_url: http://localhost/users
users_path: /users