রুবি-অন-রেলস 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
আপনি কি সহায়তার নামগুলি বোঝাতে চান? আমি সুযোগটির কার্যকারিতা বুঝতে পারি না। কিছুই পরিবর্তন না হলে এটি (: মডিউল => "অ্যাডমিন") কী করে?
কখনই_হাদ_আ_নাম

2
এটি নেমস্পেসের মতোই রুট পাথ দ্বারা ব্যবহৃত প্রকৃত পাথগুলি "/ প্রশাসক / যাই হোক না কেন" তে পরিবর্তিত করে। সহায়ক পদ্ধতির সাথে যুক্ত উপসর্গটি কেবল আলাদা।
বিকল্প

32
পার্থক্যটি আরও ভালভাবে বোঝার জন্য: URL এর মাধ্যমে স্থানীয়করণের জন্য স্কোপগুলি ব্যবহার এবং নেস্টিংয়ের জন্য নেমস্পেসিং বিবেচনা করুন, উদাহরণস্বরূপ ইউআরএল: domain.com/nl/admin/panel । এনএল একটি সুযোগ এবং অ্যাডমিন একটি নাম স্থান।
ভ্যালেন্টিন ভ্যাসিলিভ

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/routing.html#controller-namespaces- and-routing


1
সুতরাং আপনি যদি এখানে সুযোগ ব্যবহার না করেন এবং স্রেফ থাকত: সংস্থানসমূহ: প্রসঙ্গগুলি, ব্লগটিতে নিয়ামক
বাসা বাঁধে না

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

অন্য কথায়, আমরা বলতে পারি যে নামের জায়গার তুলনায় সুযোগের জন্য কোনও ডিফল্ট বিকল্প নেই । নাম স্থানটি ডিফল্টরূপে এই সমস্ত অপশন যুক্ত করে। সুতরাং সুযোগ ব্যবহার করে, আমরা প্রয়োজন অনুসারে রুটগুলি আরও সুর করতে পারি।

আপনি যদি স্কোপ এবং নেমস্পেসের ডিফল্ট আচরণের দিকে গভীরভাবে নজর রাখেন , আপনি যে স্কোপটি ডিফল্টরূপে কেবল তা সমর্থন করতে পারেন : পথ বিকল্প, যেখানে নেমস্পেস হিসাবে তিনটি বিকল্প মডিউল, পাথ এবং ডিফল্ট হিসাবে সমর্থন করে।

আরও তথ্যের জন্য, দয়া করে একটি ডক নেমস্পেস এবং রাউটিং পড়ুন


এবং যদি আপনি যে কোনও কারণে প্রয়োজনীয় প্যারামগুলি রাখার চেষ্টা করছেন, সুযোগ হ'ল সর্বোত্তম সমাধান।
ফ্যাবিও আরাজিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.