2010-02-28 11 views
54

में मार्गों का उपयोग करते समय हम map.some_link की तरह नाम का उपयोग routes.rb में मार्गों को परिभाषित हम दो तरीकों some_link_url, some_link_path में लिंक का उपयोग कर सकते हैं क्या _url और _path के बीच अंतर है।जबकि रेल

  • दोनों के बीच अंतर क्या हैं?
  • उपयोग करने के लिए और अधिक सुरक्षित कौन सा है?

उत्तर

69

मैं एक ही सवाल था और मैं a small post about this in my blog

लिखा कारण यहां संक्षेपित किया जाता है (मैं एक मंच पर इस पाया जाता है):

* _path विचारों के लिए कर रहे हैं क्योंकि ahrefs परोक्ष से जुड़े होते हैं वर्तमान यूआरएल तो यह बार-बार इसे दोहराने के लिए बाइट्स का अपशिष्ट होगा। नियंत्रक में, हालांकि, * _url को redirect_to के लिए आवश्यक है क्योंकि HTTP विनिर्देश जरूरी है कि स्थान: 3xx रीडायरेक्ट में हेडर एक पूर्ण यूआरएल है।

Here is another explanation जो कहते हैं कि यह जब किसी गैर- SSL साइट से एक SSL साइट को जोड़ने, और इसके विपरीत हम एक निरपेक्ष यूआरआई उपयोग करने की आवश्यकता पर निर्भर करता।

जो मैंने अभी तक पढ़ा है, यह सुझाव नहीं देता है कि उनमें से कोई भी दूसरे की तुलना में अधिक सुरक्षित है। यह वास्तव में "उचित" उपयोग के लिए आता है।

+1

बहुत बहुत धन्यवाद। इसे उपयोगी पाया। तो नियंत्रकों में हम "_url" का उपयोग करते समय विचारों में हम "_path" का उपयोग कर सकते हैं, हालांकि "_url" अभी भी वहां उपयोग किया जा सकता है। – MohamedSanaulla

+10

आपको नियंत्रकों के लिए * _url का उपयोग करने की आवश्यकता नहीं है, पथ भी काम करेगा। बाहरी स्रोतों के मार्ग को प्रदर्शित करते समय आपको केवल '_url' का उपयोग करना चाहिए। –

+3

कुछ और स्पष्टीकरण के लिए: '_path' आउटपुट रीडायरेक्ट में 'स्थान' शीर्षलेख के लिए भी काम करेगा। ब्राउज़र एक सापेक्ष-से-रूट रीडायरेक्ट के रूप में व्याख्या करेगा। –

67

path सापेक्ष है जबकि url पूर्ण है।

+2

बल्कि संक्षेप में। मुझे संक्षेप में पसंद है। ;) +1 – sholsinger

+2

बिल्कुल सही। नियंत्रक (सर्वर-साइड) में _url का उपयोग आवश्यक है और _path दृश्य (ब्राउज़र-अंत) में engouh हैं। – Arun

+0

संक्षिप्त, संक्षिप्त उत्तर +1 – mjwatts

1

सुरक्षित होने पर यदि आप सभी डेटा पास नहीं कर रहे हैं तो सुरक्षित है, तो _path बेहतर है क्योंकि यह एक सापेक्ष यूआरएल उत्पन्न करता है, जैसे '/ login' लेकिन _path 'http://localhost:3000/login' देगा। कृपया इस ब्लॉग पोस्ट का संदर्भ लें जो मुझे इसके बारे में कुछ समय पहले मिला था। When _url is better than _path

+3

मुझे डर है कि यह गलत है। सुरक्षा कारणों से _path का उपयोग करना कोई सुरक्षा प्रदान नहीं करता है। यह कहने जैसा ही होगा कि एक वेब सर्वर का आईपी पता गुप्त रखा जाना चाहिए, जब एक साधारण DNS अनुरोध इस जानकारी को प्रकट करता है। – jefflunt

+1

इसी तरह, सुरक्षा के लिए मेजबान और बंदरगाह "localhost: 3000" छिपाने के संबंध में ऊपर दिए गए उदाहरण के साथ, गलत है। इस जानकारी को खोजना एक व्यापक नेटवर्क नेटवर्क स्कैनिंग उपकरण का उपयोग करना आसान है। – jefflunt

33

एक संसाधन "उपयोगकर्ता" कहा जाता है के लिए अंतर का एक उदाहरण: Petros के रूप में

users_url # => http://localhost:3000/users 
users_path # => /users 
2

एक ही जवाब यह है कि modern browsers handle relative redirects just fine को छोड़कर। (मैं उसके जवाब पर टिप्पणी करता हूं, लेकिन मैं अभी तक नहीं कर सकता।)

1

_url संपूर्ण पथ देगा। चूंकि इसमें डोमेन नाम और प्रोटोकॉल शामिल है, आप इसका उपयोग उदाहरण के लिए कर सकते हैं। ईमेल भेजने या किसी अन्य डोमेन पर रीडायरेक्ट करने के लिए, आदि

_पथ डोमेन/प्रोटोकॉल आदि के बिना '/' के बाद पथ वापस कर देगा। तो आप इसे हर समय और फिर (मुझे लगता है) का उपयोग कर सकते हैं, जहां आप ' डोमेन के विवरण की आवश्यकता नहीं है। जबकि _path सहायक एक स्ट्रिंग आवेदन की जड़ से रिश्तेदार पथ युक्त, उदा .:

photos_url # => "http://www.example.com/photos" 
photos_path # => "/photos" 

प्रति Rails Guides - Routing के रूप में उत्पन्न

0

_url सहायक, एक स्ट्रिंग पूरे यूआरएल युक्त उत्पन्न करता है।

संबंधित मुद्दे