रूबी-ऑन-रेल 3 मार्ग के दायरे और नाम स्थान के बीच अंतर


110

मैं समझ नहीं पा रहा हूं कि रूबी-ऑन-रेल 3 के मार्ग में एक नाम स्थान और एक गुंजाइश के बीच क्या अंतर है।

कोई समझा सकता है?

namespace "admin" do
  resources :posts, :comments
end

scope :module => "admin" do
  resources :posts, :comments
end

जवाबों:


105

अंतर उत्पन्न रास्तों में निहित है।

रास्ते हैं admin_posts_pathऔर admin_comments_pathनामस्थान के लिए, जबकि वे सिर्फ posts_pathऔर सिर्फ हैंcomments_path स्कोप के लिए हैं।

आप :name_prefixस्कोप के विकल्प को पास करके एक नामस्थान के समान परिणाम प्राप्त कर सकते हैं ।


1
रास्तों से मतलब है कि सहायक नाम सही हैं? मुझे गुंजाइश की कार्यक्षमता समझ में नहीं आती है। क्या होता है: (मॉड्यूल => "व्यवस्थापक") यदि कुछ भी नहीं बदलता है?
never_had_a_name

2
यह मार्ग पथों द्वारा उपयोग किए जाने वाले वास्तविक रास्तों को "/ व्यवस्थापक / जो भी" में बदल देता है, नामस्थान की तरह। एकमात्र अलग सहायक सहायक विधियों में जोड़ा गया उपसर्ग है।
वैकल्पिक

32
अंतर को बेहतर ढंग से समझने के लिए: URL के माध्यम से स्थानीयकरण के लिए स्कोप का उपयोग करने और नेस्टिंग के लिए नेमस्पेसिंग पर विचार करें, उदाहरण के लिए url: domain.com/nl/admin/panel । Nl एक स्कोप है, और एडमिन एक नेमस्पेस है।
वैलेंटाइन वासिलीव

70

उदाहरण हमेशा मेरी मदद करते हैं, इसलिए यहां एक उदाहरण है:

namespace :blog do
  resources :contexts
end

हमें निम्नलिखित मार्ग देगा:

    blog_contexts GET    /blog/contexts(.:format)          {:action=>"index", :controller=>"blog/contexts"}
                  POST   /blog/contexts(.:format)          {:action=>"create", :controller=>"blog/contexts"}
 new_blog_context GET    /blog/contexts/new(.:format)      {:action=>"new", :controller=>"blog/contexts"}
edit_blog_context GET    /blog/contexts/:id/edit(.:format) {:action=>"edit", :controller=>"blog/contexts"}
     blog_context GET    /blog/contexts/:id(.:format)      {:action=>"show", :controller=>"blog/contexts"}
                  PUT    /blog/contexts/:id(.:format)      {:action=>"update", :controller=>"blog/contexts"}
                  DELETE /blog/contexts/:id(.:format)      {:action=>"destroy", :controller=>"blog/contexts"}

स्कोप का उपयोग कर रहा है ...

scope :module => 'blog' do
  resources :contexts
end

हमें देंगे:

     contexts GET    /contexts(.:format)           {:action=>"index", :controller=>"blog/contexts"}
              POST   /contexts(.:format)           {:action=>"create", :controller=>"blog/contexts"}
  new_context GET    /contexts/new(.:format)       {:action=>"new", :controller=>"blog/contexts"}
 edit_context GET    /contexts/:id/edit(.:format)  {:action=>"edit", :controller=>"blog/contexts"}
      context GET    /contexts/:id(.:format)       {:action=>"show", :controller=>"blog/contexts"}
              PUT    /contexts/:id(.:format)       {:action=>"update", :controller=>"blog/contexts"}
              DELETE /contexts/:id(.:format)       {:action=>"destroy", :controller=>"blog/contexts"}

यहाँ इस विषय पर कुछ अच्छा पढ़ने दिया गया है: http://edgeguides.rubyonrails.org/rout.html#controller-namespaces-and-rout


1
इसलिए यदि आपने यहाँ गुंजाइश का उपयोग नहीं किया है और बस: संसाधन: संदर्भ, नियंत्रक ब्लॉग पर नेस्टेड नहीं होगा: ब्लॉग / संदर्भ
berto77

55

से रेल गाइड

"नाम स्थान का दायरा स्वचालित :asरूप से :moduleऔर :pathउपसर्ग जोड़ देगा ।"

इसलिए

namespace "admin" do
  resources :contexts
end

के समान है

scope "/admin", as: "admin", module: "admin" do
  resources :contexts
end

2

स्कोप और नेमस्पेस दोनों ही तयशुदा डिफॉल्ट विकल्पों के लिए मार्ग का एक सेट तैयार कर रहे हैं।
सिवाय के लिए कोई डिफ़ॉल्ट विकल्प हैं कि गुंजाइश है, और के लिए नाम स्थान :path , :as, :module, :shallow_pathऔर:shallow_prefix विकल्प नाम स्थान के नाम के सभी डिफ़ॉल्ट।

स्कोप और नेमस्पेस दोनों के लिए उपलब्ध विकल्प मैच के उन लोगों के अनुरूप हैं ।


1

क्षेत्र थोड़ा जटिल है, लेकिन आप जो करना चाहते हैं ठीक करने के लिए और अधिक विकल्प प्रदान करते हैं।

गुंजाइश तीन विकल्पों का समर्थन करती है : मॉड्यूल, पथ और जैसे । यदि आप इसके सभी विकल्पों के साथ गुंजाइश देखते हैं, तो यह बिल्कुल नाम स्थान के समान होगा।

दूसरे शब्दों में, मार्गों द्वारा उत्पन्न

namespace :admin do
  resources :posts
end

वैसा ही है

scope module: 'admin', path: 'admin', as: 'admin' do
  resources :posts
end

दूसरे शब्दों में, हम कह सकते हैं कि नाम स्थान की तुलना में गुंजाइश के लिए कोई डिफ़ॉल्ट विकल्प नहीं हैं । नाम स्थान डिफ़ॉल्ट रूप से इन सभी विकल्पों को जोड़ते हैं। इस प्रकार, गुंजाइश का उपयोग करते हुए, हम आवश्यकतानुसार मार्गों को अधिक ठीक कर सकते हैं।

यदि आप स्कोप और नेमस्पेस डिफॉल्ट बिहेवियर पर एक गहरी नज़र डालते हैं, तो आप पाएंगे कि स्कोप डिफ़ॉल्ट रूप से केवल स् थाप् स सपोर्ट करता है : पथ विकल्प, जहाँ नेमस्पेस तीन ऑप्शन मॉड्यूल, पाथ और डिफॉल्ट रूप से सपोर्ट करता है ।

अधिक जानकारी के लिए, कृपया एक डॉक्टर का नाम स्थान और मार्ग देखें


और अगर आप किसी भी कारण से, किसी भी कारण से, एक आवश्यक पैरामेट्स लगाने की कोशिश कर रहे हैं, तो गुंजाइश सबसे अच्छा समाधान है।
फैबियो आराजो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.