ruby-on-rails - software - ruby on rails tutorial
diferencia entre el alcance y el espacio de nombres del enrutamiento ruby-on-rails 3 (4)
La diferencia radica en las rutas generadas.
Las rutas son admin_posts_path
y admin_comments_path
para el espacio de nombres, mientras que son solo posts_path
y comments_path
para el alcance.
Puede obtener el mismo resultado que un espacio de nombres pasando la opción :name_prefix
a scope.
No puedo entender cuál es la diferencia entre un espacio de nombres y un alcance en el enrutamiento de ruby-on-rails 3.
¿Podría alguien explicar por favor?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
Tanto el alcance como el espacio de nombres están explorando un conjunto de rutas a las opciones predeterminadas dadas.
Excepto que no hay opciones predeterminadas para el alcance , y para el espacio de nombres :path
:shallow_path
como :shallow_path
:module
:shallow_path
y opciones de :shallow_prefix
, todas predeterminadas para el nombre del espacio de nombres.
Las opciones disponibles para el alcance y el espacio de nombre corresponden a las de coincidencia .
de la http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing
"El ámbito del espacio de nombres se agregará automáticamente :as
así como también :module
y :path
prefijos de :path
".
asi que
namespace "admin" do
resources :contexts
end
es lo mismo que
scope "/admin", as: "admin", module: "admin" do
resources :contexts
end
ejemplos siempre me ayudan, así que aquí hay un ejemplo:
namespace :blog do
resources :contexts
end
nos dará las siguientes rutas:
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"}
Usando alcance ...
scope :module => ''blog'' do
resources :contexts
end
Nos dará:
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"}
Aquí hay una buena lectura sobre el tema: http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing