ruby on rails - मैं रूबी पर रूबी में वर्तमान पूर्ण यूआरएल कैसे प्राप्त करूं?




ruby-on-rails url (20)

रेल 3.2 या रेल 4+ के लिए

वर्तमान यूआरएल प्राप्त करने के लिए आपको 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.url लिख सकते हैं। यह मेजबान के साथ प्रोटोकॉल (आमतौर पर http: //) को जोड़ता है, और request_uri आपको पूरा पता देने के लिए।

मैं अपने रूबी में रेल दृश्य पर वर्तमान पूर्ण यूआरएल कैसे प्राप्त कर सकता हूं?

request.request_uri केवल सापेक्ष यूआरएल देता है।



आप उपयोग कर सकते हैं:

request.full_path

या

request.url

उम्मीद है कि यह आपकी समस्या का समाधान करेगा।

चियर्स


आप एक चर को URI.parse(current_url) सेट कर सकते हैं, मुझे अभी तक यह प्रस्ताव नहीं दिखाई देता है और यह मेरे लिए काम करता है।


आप रूबी विधि का उपयोग कर सकते हैं:

:root_url

जो बेस यूआरएल के साथ पूरा पथ प्राप्त करेगा:

localhost:3000/bla

आप रेल 3.2 के लिए किसी का भी उपयोग कर सकते हैं:

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

मुझे लगता है कि यह हर जगह काम करेगा

"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"

धागे में दिए गए सुझावों में से कोई भी मुझे दुःख की मदद नहीं करता, सिवाय इसके कि किसी ने कहा कि उसने डीबगर का इस्तेमाल वह ढूंढने के लिए किया था जिसे उसने देखा था।

मैंने मानक 404 और 500 के बजाय कुछ कस्टम त्रुटि पेज बनाए हैं, लेकिन request.url अपेक्षित /non-existing-mumbo-jumbo बजाय /404 में समाप्त हुआ है।

मुझे उपयोग करने के लिए क्या चाहिए था

request.original_url

पूर्ण यूआरएल प्राप्त करने के लिए जिसका मतलब है कि from the root इसे इस तरह प्रदर्शित किया जा सकता है

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

Users_url सहायक एक यूआरएल उत्पन्न करता है जिसमें प्रोटोकॉल और होस्ट नाम शामिल होता है। उपयोगकर्ता_पैथ सहायक केवल पथ भाग उत्पन्न करता है।

users_url: http://localhost/users
users_path: /users

मुझे एप्लिकेशन URL आवश्यकता थी लेकिन उपनिर्देशिका के साथ। मैंनें इस्तेमाल किया:

root_url(:only_path => false)

मुझे लगता है कि अनुरोध .डोमेन काम करेगा, लेकिन अगर आप एक उप निर्देशिका में हैं जैसे blah.blah.com? ऐसा कुछ काम कर सकता है:

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

अपनी पथ संरचना के आधार पर पैरामीटर बदलें।

उम्मीद है की वो मदद करदे!


यदि आप रेल 3.2 या रेल 4 का उपयोग कर रहे हैं तो आपको वर्तमान यूआरएल प्राप्त करने के लिए request.original_url का उपयोग करना चाहिए।

विधि के लिए दस्तावेज़ीकरण http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url पर है लेकिन यदि आप उत्सुक हैं तो कार्यान्वयन है:

def original_url
  base_url + original_fullpath
end

यदि आप विशिष्ट होना चाहते हैं, अर्थात्, आपको जिस मार्ग की आवश्यकता है उसे आप जानते हैं:

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

यह रेल 3.0 पर रूबी के लिए काम करता है और रूबी पर रूबी के अधिकांश संस्करणों द्वारा समर्थित होना चाहिए:

request.env['REQUEST_URI']

रूबी का उपयोग 1.9.3-पी 1 9 4 और रेल पर रूबी 3.2.6:

अगर request.fullpath आपके लिए काम नहीं करता है, तो request.env ["HTTP_REFERER"] आज़माएं

नीचे मेरी कहानी है।

मुझे संचयी पृष्ठों के लिए वर्तमान यूआरएल (जिसे उसके ब्राउज़र में उपयोगकर्ता के लिए पता बार में दिखाया गया है) का पता लगाने में समान समस्या आई है, उदाहरण के लिए, http://localhost:3002/users/1/history/issues लिए विभिन्न नियंत्रकों से जानकारी को जोड़ती है।

उपयोगकर्ता विभिन्न प्रकार की समस्याओं के लिए स्विच कर सकते हैं। उन सभी सूचियों को विभिन्न नियंत्रकों / आंशिक (बिना लोड किए बिना) से अजाक्स के माध्यम से लोड किया जाता है।

समस्या सूची के प्रत्येक आइटम में बैक बटन के लिए सही पथ सेट करना था ताकि बैक बटन अपने पृष्ठ और संचयी पृष्ठ इतिहास दोनों में सही ढंग से काम कर सके।

अगर मैं request.fullpath का उपयोग करता हूं, तो यह अंतिम जावास्क्रिप्ट अनुरोध का मार्ग देता है जो निश्चित रूप से वह यूआरएल नहीं है जिसे मैं ढूंढ रहा हूं।

तो मैंने 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

रेल के लिए 3:

request.fullpath


रेल पर रूबी के लिए 3:

request.url
request.host_with_port

मैंने एक डीबगर सत्र निकाल दिया और अनुरोध ऑब्जेक्ट पूछताछ की:

request.public_methods

वर्तमान URL को वापस करने और अन्य पैरामीटर में विलय करने की अनुमति देने के लिए आप ApplicationController में यह current_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

रेल 4.0

आप request.original_url उपयोग कर सकते हैं, आउटपुट उदाहरण के नीचे दिया जाएगा

get "/articles?page=2"

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

 url_for(params)

और आप आसानी से कुछ नया पैरामीटर जोड़ सकते हैं:

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

(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)




url