답변:
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 + fullpath ( github.com/rails/rails/blob/… )
당신은 사용할 수 있습니다 url_for(only_path: false)
사용 중지 경고 : #request_uri 사용은 사용되지 않습니다 . 대신 전체 경로를 사용하십시오.
request.uri
나
당신이 사용하는 경우 레일 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
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
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
원래 포스터가 요청한대로를 제공하지 않습니다 .
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 사용하는 경우 마지막으로 요청한 URL이 아닌 마지막 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
루비 방법을 사용할 수 있습니다 :
:root_url
기본 URL로 전체 경로를 얻습니다.
localhost:3000/bla
:root_url
을 얻는 것과 같은 것을 사용할 때 절대 URL에 전달하는 매개 변수를 어떻게 제한 할 수 있습니까? 내가 좋아하는 뭔가를저기서있어 가정 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.2 또는 Rails 4의 경우 "request.original_url"참조 : 원래 URL 메소드
Rails 3의 경우 request.url이 더 이상 사용되지 않으므로 연결하여 절대 경로를 얻을 수 있습니다.
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
레일 2
request.url
request.env["REQUEST_URI"]
레일 2.3.4에서 테스트되었으며 다른 버전에 대해서는 몰랐습니다.