web-dev-qa-db-ja.com

Ruby on Railsで現在の絶対URLを取得する方法

Ruby on Railsのビューで現在の 絶対URL を取得する方法を教えてください。

request.request_uriは相対URLのみを返します。

995
Jakub Arnold

Rails 3.2またはRails 4以降の場合

現在のURLを取得するにはrequest.original_urlを使用してください。

このメソッドは original_urlメソッド で文書化されていますが、興味があれば、実装は次のようになります。

def original_url
  base_url + original_fullpath
end

レール3の場合:

"#{request.protocol}#{request.Host_with_port}#{request.fullpath}"は現在推奨されていないので、request.urlを書くことができます。


レール2の場合:

request.urlの代わりにrequest.request_uriを書くことができます。これはプロトコル(通常はhttp://)とHost、そしてrequest_uriを組み合わせてあなたに完全なアドレスを与えます。

1379
Jaime Bellmyer

私はRuby on Rails 3.0メソッドがrequest.fullpathになったと思います。

131
mcr

url_for(:only_path => false)を使うことができます

114
grzuy

非推奨警告: #request_uriの使用は推奨されません 。代わりにフルパスを使用してください。

67
ecoologic

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
58
Mike

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
50
grosser

Ruby on Rails 3の場合:

request.url
request.Host_with_port

デバッガセッションを起動し、リクエストオブジェクトをクエリしました。

request.public_methods
35
Duke

Ruby on Rails 3.1.0.rc4の場合:

 request.fullpath
31
Lucas Renan

アプリケーション _ url _ が必要でしたが、サブディレクトリが必要です。私は使った:

root_url(:only_path => false)
28
Dorian
 url_for(params)

そして、簡単に新しいパラメータを追加することができます。

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

Request.domainはうまくいくと思いますが、blah.blah.comのようなサブディレクトリにいる場合はどうなりますか?このようなものでうまくいく可能性があります。

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

パス構造に基づいてパラメータを変更します。

それが役立つことを願っています!

16
James M

request_uriはRuby on Rails 3では推奨されないようです。

Using #request_uri is deprecated. Use fullpath instead.
14
Ken Earley

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
13
Serge Seletskyy

これはRuby on Rails 3.0で動作し、Ruby on Railsのほとんどのバージョンでサポートされるはずです。

request.env['REQUEST_URI']
12
Tim Santeford

誰かが彼が探したものを見つけるためにデバッガを使ったと言ったものを除いて、ここのスレッドの中の提案はどれも悲しいことに私を助けませんでした。

標準の404および500の代わりにカスタムエラーページをいくつか作成しましたが、request.urlは、予想される/404ではなく/non-existing-mumbo-jumboで終わりました。

私が使う必要があったのは

request.original_url
11
Frans

もし親戚であれば、ドメインがないことを意味しているのであれば、request.domainを調べてください。

9
ghoppe

Rubyメソッドを使うことができます:

:root_url

これはベースURLでフルパスを取得します。

localhost:3000/bla
9
Idan Wender
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
8
msroot

Rails 3ではあなたが使うことができます

request.original_url

http://apidock.com/Rails/v3.2.8/ActionDispatch/Request/original_url

6
mikrobi

Rails 4.0

あなたはrequest.original_urlを使うことができます、出力は下記の例のようになります

get "/articles?page=2"

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

もしあなたが具体的になりたいのであれば、あなたはあなたが必要とする道を知っています:

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

どちらでも使えます

request.original_url 

または

"#{request.protocol}#{request.Host_with_port}" 

現在のURLを取得します。

3
Robin Garg

レール3の場合:

request.fullpath

3
Pankhuri

Rails 3.2またはRails 4の場合 単に「request.original_url」のようにしてください。参照: オリジナルのURLメソッド

Rails 3の場合 request.urlは廃止予定です。連結することで絶対パスを取得できます。

"#{request.protocol}#{request.Host_with_port}#{request.fullpath}"

レール2の場合

request.url
3
Amit

rails 3.2にはどれでも使用できます。

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

私はそれがあらゆる場所でうまくいくと思います

"#{request.protocol}#{request.Host}:#{request.port}#{request.fullpath}"
3
uma

クエリパラメータなしでリクエストURLを取得します。

def current_url_without_parameters
  request.base_url + request.path
end
3
Nerve
request.env["REQUEST_URI"]

rails 2.3.4で動作し、他のバージョンについては知りません。

2

あなたが使用することができます:

request.full_path

または

request.url

うまくいけば、それはあなたの問題を解決するでしょう。

乾杯

1

あなたは変数をURI.parse(current_url)に設定することができます、私はまだここでこの提案を見ていません、そしてそれは私のために働きます。

1
RaK427

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 をご覧ください。

0
V K Singh

レール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

0
user3118220

from the rootという絶対URLを取得するには、このように表示できます。

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

Users_urlヘルパーはプロトコルとホスト名を含むURLを生成します。 users_pathヘルパーはパス部分のみを生成します。

users_url: http://localhost/users
users_path: /users
0
Ahmad hamza