Mevcut mutlak URL'yi Ruby on Rails görünümümde nasıl alabilirim ?
request.request_uriSadece göreceli döndüren URL .
Mevcut mutlak URL'yi Ruby on Rails görünümümde nasıl alabilirim ?
request.request_uriSadece göreceli döndüren URL .
Yanıtlar:
request.original_urlGeç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.urlartık uygun bulunmamaktadır.
Bunun request.urlyerine yazabilirsiniz request.request_uri. Bu, protokolü (genellikle http: //) ana bilgisayarla ve request_uri'yi tam adresi vermek için birleştirir.
fullpathprotokolü / 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.urlOnaylanmayan talep için bir referansı gösterebilir misiniz? Önerilen çözüm, request.urlzaten 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.urive 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_urlakı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_toiseniz, sadece kullanmak params.mergeve url_fortamamen atlayabilirsiniz
Ruby on Rails 3.1.0.rc4'te:
request.fullpath
fullpathabsolute URListenen 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_uriRuby 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.urlsona 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_urlalmak 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_namemutlak 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 rootbunun 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