回答:
request.original_url
現在の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://)とホスト、およびrequest_uriを組み合わせて完全なアドレスを提供します。
fullpath
はプロトコル/ドメイン/ポートを含みません!絶対URLではありません!
"http://#{request.host+request.fullpath}"
動作するかどうか、(ポートが重要な場合)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
廃止された申し立ての参照を指摘できますか?提案された解決策は、request.url
すでに何をしているのかを示す長い道のりです。実装は、単純にプロトコル+ host_with_port +フルパス(github.com/rails/rails/blob/…)です
Ruby on Rails 3.0メソッドは今だと思いますrequest.fullpath
。
あなたは使うことができます url_for(only_path: false)
サポート終了の警告:#request_uriの使用は廃止されました。代わりにフルパスを使用してください。
request.uri
、この質問ですでに何度か指摘されていますが... OK、ありがとう
あなたが使用している場合のRails 3.2またはレール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
このcurrent_urlメソッドをApplicationControllerに追加して、現在の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
url_for params.merge(:format => "PDF", :only_path => false)
link_to
使用params.merge
してurl_for
完全にスキップすることができます
Ruby on Rails 3.1.0.rc4の場合:
request.fullpath
fullpath
absolute URL
要求されたオリジナルのポスターを提供しません。
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'] %>
パス構造に基づいてパラメーターを変更します。
お役に立てば幸いです。
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ではありません。
そこで、最後にリロードされたリクエストの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']
rubyメソッドを使用できます。
:root_url
これは、ベースURLを含む完全なパスを取得します。
localhost:3000/bla
:root_url
を取得するために何かを使用するときに、渡すURLを絶対URLに制限する方法を教えてください。私はのようなのsomethinをusinだと仮定some_method(:products_brand_url, brand: brand, entity_name: "brand")
し、some_method
私のような表情に私のルートを望んでいない`デフsome_method(ルート、OPTS = {})最後`として定義されています- http://localhost:3000/brands/brand_name?&entity_name="brand"
。ルートを次のようにしたいですhttp://localhost:3000/brands/brand_name
。私entity_name
は、絶対URLのパラメータとしてではなく、optsハッシュの一部にしたいだけです。
root_url
。
Rails 3では、あなたは使うことができます
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
request.env["REQUEST_URI"]
テスト済みのレール2.3.4で動作し、他のバージョンについては認識していません。