No puedo entender cuál es la diferencia entre un espacio de nombres y un ámbito en el enrutamiento de ruby-on-rails 3.

Podría alguien por favor explicarme?

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

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

5 Comentarios

  1. 101

    La diferencia radica en los caminos generados.

    Las rutas de acceso son admin_posts_path y admin_comments_path para el espacio de nombres, mientras que son sólo posts_path y comments_path para el ámbito.

    Usted puede conseguir el mismo resultado como un espacio de nombres por los que pasa el :name_prefix opción a su alcance.

    • por caminos u significa el ayudante de los nombres de la derecha? no entiendo el alcance de la funcionalidad. lo que hace (:módulo => «admin») ¿si nada cambia?
    • Los cambios de la real caminos utilizados por la ruta de los caminos de «/admin/lo que sea», como espacio de nombres. El único diferente es el prefijo añadido a los métodos auxiliares.
    • Para comprender mejor la diferencia: considerar el uso de ámbitos para la localización a través de la URL y namespacing para la anidación, por ejemplo, la dirección url:domain.com/nl/admin/panel. El nl es un ámbito, y el admin es un espacio de nombres.
  2. 65

    ejemplos siempre me ayuda, así que aquí está 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"}

    Utilizando 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í es una buena lectura sobre el tema: http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing

    • Así que si usted no utiliza el ámbito de aquí y sólo tenía: recursos :contextos, el controlador no puede anidarse en el blog: blog/contextos
  3. 53

    de la rieles de guía

    «El ámbito de espacio de nombres, se agrega automáticamente :as así como :module y :path prefijos.»

    así

    namespace "admin" do
      resources :contexts
    end

    es el mismo que

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

    Tanto ámbito y espacio de nombres se alcance un conjunto de rutas para las opciones por defecto.

    Excepto que no hay opciones por defecto para ámbito, y para espacio de nombres
    :path, :as, :module, :shallow_path y :shallow_prefix todas las opciones por defecto, el nombre del espacio de nombres.

    Las opciones disponibles tanto ámbito y espacio de nombres corresponden a las de partido.

  5. 0

    ámbito es un poco complejo, pero proporciona más opciones para ajustar exactamente lo que usted desea hacer.

    ámbito admite tres opciones: módulo, la ruta y como. Si usted ve alcance con todas las opciones, va a ser exactamente igual que el espacio de nombres.

    En otras palabras, rutas generadas por

    namespace :admin do
      resources :posts
    end

    es la misma que la

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

    En otras palabras, podemos decir que no hay opciones por defecto para ámbito como en comparación con el espacio de nombres. espacio de nombres agregar todas estas opciones por defecto. Así que usando ámbito, podemos afinar las rutas según se requiera.

    Si usted toma una mirada profunda en ámbito y espacio de nombres comportamiento por defecto, usted encontrará que ámbito por defecto sólo admite :ruta opción, donde como espacio de nombres admite tres opciones módulo, la ruta y como por defecto.

    Para obtener más información, por favor consulte a un médico espacio de nombres-y-de enrutamiento.

Dejar respuesta

Please enter your comment!
Please enter your name here