मैं समझ नहीं पा रहा हूं कि रूबी-ऑन-रेल 3 के मार्ग में एक नाम स्थान और एक गुंजाइश के बीच क्या अंतर है।
कोई समझा सकता है?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
मैं समझ नहीं पा रहा हूं कि रूबी-ऑन-रेल 3 के मार्ग में एक नाम स्थान और एक गुंजाइश के बीच क्या अंतर है।
कोई समझा सकता है?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
जवाबों:
अंतर उत्पन्न रास्तों में निहित है।
रास्ते हैं admin_posts_pathऔर admin_comments_pathनामस्थान के लिए, जबकि वे सिर्फ posts_pathऔर सिर्फ हैंcomments_path स्कोप के लिए हैं।
आप :name_prefixस्कोप के विकल्प को पास करके एक नामस्थान के समान परिणाम प्राप्त कर सकते हैं ।
उदाहरण हमेशा मेरी मदद करते हैं, इसलिए यहां एक उदाहरण है:
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
से रेल गाइड
"नाम स्थान का दायरा स्वचालित :asरूप से :moduleऔर :pathउपसर्ग जोड़ देगा ।"
इसलिए
namespace "admin" do
resources :contexts
end
के समान है
scope "/admin", as: "admin", module: "admin" do
resources :contexts
end
स्कोप और नेमस्पेस दोनों ही तयशुदा डिफॉल्ट विकल्पों के लिए मार्ग का एक सेट तैयार कर रहे हैं।
सिवाय के लिए कोई डिफ़ॉल्ट विकल्प हैं कि गुंजाइश है, और के लिए नाम स्थान
:path , :as, :module, :shallow_pathऔर:shallow_prefix विकल्प नाम स्थान के नाम के सभी डिफ़ॉल्ट।
स्कोप और नेमस्पेस दोनों के लिए उपलब्ध विकल्प मैच के उन लोगों के अनुरूप हैं ।
क्षेत्र थोड़ा जटिल है, लेकिन आप जो करना चाहते हैं ठीक करने के लिए और अधिक विकल्प प्रदान करते हैं।
गुंजाइश तीन विकल्पों का समर्थन करती है : मॉड्यूल, पथ और जैसे । यदि आप इसके सभी विकल्पों के साथ गुंजाइश देखते हैं, तो यह बिल्कुल नाम स्थान के समान होगा।
दूसरे शब्दों में, मार्गों द्वारा उत्पन्न
namespace :admin do
resources :posts
end
वैसा ही है
scope module: 'admin', path: 'admin', as: 'admin' do
resources :posts
end
दूसरे शब्दों में, हम कह सकते हैं कि नाम स्थान की तुलना में गुंजाइश के लिए कोई डिफ़ॉल्ट विकल्प नहीं हैं । नाम स्थान डिफ़ॉल्ट रूप से इन सभी विकल्पों को जोड़ते हैं। इस प्रकार, गुंजाइश का उपयोग करते हुए, हम आवश्यकतानुसार मार्गों को अधिक ठीक कर सकते हैं।
यदि आप स्कोप और नेमस्पेस डिफॉल्ट बिहेवियर पर एक गहरी नज़र डालते हैं, तो आप पाएंगे कि स्कोप डिफ़ॉल्ट रूप से केवल स् थाप् स सपोर्ट करता है : पथ विकल्प, जहाँ नेमस्पेस तीन ऑप्शन मॉड्यूल, पाथ और डिफॉल्ट रूप से सपोर्ट करता है ।
अधिक जानकारी के लिए, कृपया एक डॉक्टर का नाम स्थान और मार्ग देखें ।