Mevcut mutlak URL'yi Ruby on Rails görünümümde nasıl alabilirim ?
request.request_uri
Sadece göreceli döndüren URL .
Mevcut mutlak URL'yi Ruby on Rails görünümümde nasıl alabilirim ?
request.request_uri
Sadece göreceli döndüren URL .
Yanıtlar:
request.original_url
Geçerli URL'yi almak için kullanmalısınız .
Bu yöntem original_url yönteminde belgelenmiştir , ancak merak ediyorsanız uygulama şu şekildedir:
def original_url
base_url + original_fullpath
end
Sen yazabilir "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
beri, request.url
artık uygun bulunmamaktadır.
Bunun request.url
yerine yazabilirsiniz request.request_uri
. Bu, protokolü (genellikle http: //) ana bilgisayarla ve request_uri'yi tam adresi vermek için birleştirir.
fullpath
protokolü / domain / portu İÇERMEZ! Mutlak bir URL değil!
"http://#{request.host+request.fullpath}"
(liman önemliyse) veya başka bir şekilde çalışacaktır"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
Onaylanmayan talep için bir referansı gösterebilir misiniz? Önerilen çözüm, request.url
zaten ne yaptığını söylemenin uzun bir yoludur ; uygulama sadece protokol + host_with_port + fullpath ( github.com/rails/rails/blob/… )
Kullanabilirsin url_for(only_path: false)
DEPRECATION UYARI: #request_uri kullanımı kullanımdan kaldırılmıştır . Bunun yerine tam yol kullanın.
request.uri
ve bu zaten bu soruda birkaç kez işaret edildi, ancak ... tamam, teşekkürler
Eğer kullanıyorsanız Rayları 3.2 veya Rails 4 kullanmanız gereken request.original_url
akım URL almak.
Yöntemin belgeleri http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url adresindedir, ancak uygulamanın merak ediyorsanız:
def original_url
base_url + original_fullpath
end
Geçerli URL'yi döndürmek ve diğer parametrelerde birleştirmeye izin vermek için bu current_url yöntemini ApplicationController öğesine ekleyebilirsiniz.
# 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
Örnek Kullanım:
current_url --> http://...
current_url(:page=>4) --> http://...&page=4
url_for params.merge(:format => "PDF", :only_path => false)
link_to
iseniz, sadece kullanmak params.merge
ve url_for
tamamen atlayabilirsiniz
Ruby on Rails 3.1.0.rc4'te:
request.fullpath
fullpath
absolute URL
istenen orijinal poster olarak bir sağlamaz .
url_for(params)
Ve kolayca yeni bir parametre ekleyebilirsiniz:
url_for(params.merge(:tag => "lol"))
Bence request.domain işe yarayacaktır, ama ya blah.blah.com gibi bir alt dizindeyseniz? Böyle bir şey işe yarayabilir:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
Parametreleri yol yapınıza göre değiştirin.
Umarım yardımcı olur!
request_uri
Ruby on Rails 3'te kullanımdan kaldırılmış gibi görünüyor .
Using #request_uri is deprecated. Use fullpath instead.
Ruby 1.9.3-p194 ve Ruby on Rails 3.2.6'yı kullanma:
Eğer request.fullpath sizin için çalışmaz, deneyin request.env [ "HTTP_REFERER"]
İşte benim hikayem aşağıda.
Örneğin, farklı denetleyicilerin bilgilerini birleştiren kümülatif sayfalar için geçerli URL'yi (tarayıcıda kullanıcı için adres çubuğunda gösterilen) algılamada benzer bir sorunla karşılaştım http://localhost:3002/users/1/history/issues
.
Kullanıcı farklı türde sorun listelerine geçiş yapabilir. Tüm bu listeler Ajax üzerinden farklı kontrolörlerden / parçalardan yüklenir (yeniden yüklenmeden).
Sorun, listenin her bir öğesinde geri düğmesi için doğru yolu ayarlamaktı, böylece geri düğmesi hem kendi sayfasında hem de kümülatif sayfa geçmişinde düzgün çalışabiliyordu .
Request.fullpath kullanmam durumunda , kesinlikle aradığım URL olmayan son JavaScript isteğinin yolunu döndürür.
Bu yüzden son yeniden yüklenen isteğin URL'sini saklayan request.env ["HTTP_REFERER"] kullandım.
İşte karar vermek için kısmi bir alıntı
- 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
Bu, Ruby on Rails 3.0 için çalışır ve Ruby on Rails'in çoğu sürümü tarafından desteklenmelidir:
request.env['REQUEST_URI']
Konudaki önerilerin hiçbiri, birinin ne aradığını bulmak için hata ayıklayıcıyı kullandığını söylediği durumlar dışında, ne yazık ki bana yardımcı olmadı.
Standart 404 ve 500 yerine bazı özel hata sayfaları oluşturdum, ancak beklenen yerine request.url
sona erdi ./404
/non-existing-mumbo-jumbo
Kullanmam gereken şey
request.original_url
Ruby yöntemini kullanabilirsiniz:
:root_url
temel url ile tam yolu alacak:
localhost:3000/bla
:root_url
almak gibi bir şey kullandığımda mutlak bir URL'ye geçirdiğim parametreleri nasıl kısıtlayabileceğimi lütfen söyleyebilir misiniz ? Diyelim ki böyle bir şey kullanıyorum some_method(:products_brand_url, brand: brand, entity_name: "brand")
ve some_method
`def some_method (route, opts = {}) end` olarak tanımlandım http://localhost:3000/brands/brand_name?&entity_name="brand"
. Güzergahın benzemesini istiyorum http://localhost:3000/brands/brand_name
. Ben sadece entity_name
mutlak url için bir param olarak değil, opts karma bir parçası olmak istiyorum .
root_url
.
Rails 3'te şunları kullanabilirsiniz:
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
Raylar 4.0
kullanabilirsiniz request.original_url
, çıktı aşağıdaki örnekte olduğu gibi olacaktır
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
Rails 3.2 veya Rails 4 için "request.original_url" referansını alın. Referans: Orijinal URL Yöntemi
Rails 3 için request.url kullanımdan kaldırılmıştır. Birleştirerek mutlak yol elde edebiliriz
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
Raylar 2 için
request.url
request.env["REQUEST_URI"]
2.3.4 raylarda çalışır ve diğer sürümler hakkında bilmiyorum.
Ya kullanabilirsiniz
request.original_url
veya
"#{request.protocol}#{request.host_with_port}"
Mevcut URL'yi almak için.
Kullanabilirsiniz:
request.full_path
veya
request.url
Umarım sorununuzu çözecektir.
Şerefe
Mutlak URL'yi almak için, from the root
bunun bu şekilde görüntülenebileceği anlamına gelir
<%= link_to 'Edit', edit_user_url(user) %>
Users_url yardımcısı, protokolü ve ana bilgisayar adını içeren bir URL oluşturur. Users_path yardımcısı yalnızca yol bölümünü oluşturur.
users_url: http://localhost/users
users_path: /users