Saya tidak mengerti apa perbedaan antara namespace dan ruang lingkup dalam perutean ruby-on-rails 3.
Bisakah seseorang menjelaskan?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
Saya tidak mengerti apa perbedaan antara namespace dan ruang lingkup dalam perutean ruby-on-rails 3.
Bisakah seseorang menjelaskan?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
Jawaban:
Perbedaannya terletak pada jalur yang dihasilkan.
Paths adalah admin_posts_pathdan admin_comments_pathuntuk namespace, sementara itu adil posts_pathdan comments_pathuntuk ruang lingkup.
Anda bisa mendapatkan hasil yang sama sebagai namespace dengan meneruskan :name_prefixopsi ke scope.
Contoh selalu membantu saya, jadi inilah contohnya:
namespace :blog do
resources :contexts
end
akan memberi kita rute berikut:
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"}
Menggunakan ruang lingkup ...
scope :module => 'blog' do
resources :contexts
end
Akan memberi kami:
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"}
Berikut adalah beberapa bacaan bagus tentang subjek: http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing
dari panduan rel
"Ruang lingkup namespace akan secara otomatis menambahkan :asserta :moduledan :pathprefiks."
begitu
namespace "admin" do
resources :contexts
end
sama dengan
scope "/admin", as: "admin", module: "admin" do
resources :contexts
end
Baik cakupan maupun namespace mencakup sekumpulan rute ke opsi default yang diberikan.
Kecuali bahwa tidak ada pilihan default untuk lingkup , dan untuk namespace
:path , :as, :module, :shallow_pathdan:shallow_prefix pilihan semua default ke nama namespace.
Opsi yang tersedia untuk cakupan dan namespace sesuai dengan yang cocok .
Scope agak rumit, tetapi menyediakan lebih banyak opsi untuk menyesuaikan dengan tepat apa yang ingin Anda lakukan.
lingkup mendukung tiga opsi: modul, jalur dan sebagai . Jika Anda melihat cakupan dengan semua opsi itu, itu akan persis sama dengan namespace.
Dengan kata lain, rute dihasilkan oleh
namespace :admin do
resources :posts
end
sama seperti
scope module: 'admin', path: 'admin', as: 'admin' do
resources :posts
end
Dengan kata lain, kita dapat mengatakan bahwa tidak ada opsi default untuk cakupan dibandingkan dengan namespace. namespace menambahkan semua opsi ini secara default. Dengan demikian, dengan menggunakan scope, kami dapat lebih menyempurnakan rute sesuai kebutuhan.
Jika Anda melihat lebih dalam cakupan dan perilaku default namespace , Anda akan menemukan bahwa cakupan secara default hanya mendukung : opsi jalur, sedangkan namespace mendukung modul tiga opsi , jalur, dan sebagai default.
Untuk info lebih lanjut, lihat doc namespace-and-routing .