la différence entre la portée et l'espace de noms de ruby-on-rails 3 de routage
Je ne comprends pas quelle est la différence entre un espace de noms et un champ d'application dans le routage de ruby-on-rails 3.
Quelqu'un pourrait-il expliquer?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
Vous devez vous connecter pour publier un commentaire.
La différence réside dans les chemins générés.
Les chemins sont
admin_posts_path
etadmin_comments_path
pour l'espace de noms, alors qu'ils sont justeposts_path
etcomments_path
pour la portée.Vous pouvez obtenir le même résultat qu'un espace de noms par l'adoption de la
:name_prefix
option de portée.exemples toujours m'aider, voici un exemple:
va nous donner les itinéraires suivants:
À l'aide de l'ampleur...
Va nous donner:
Voici quelques bonnes lectures sur le sujet: http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing
de la guide rails
"L'espace de noms de la portée va automatiquement ajouter
:as
ainsi que:module
et:path
préfixes."donc
est le même que
Les deux portée et espace de noms sont à la portée d'un ensemble de routes les options par défaut.
Sauf qu'il n'y a pas des options par défaut pour portée, et pour espace de noms
:path
,:as
,:module
,:shallow_path
et:shallow_prefix
toutes les options par défaut le nom de l'espace de noms.Options disponibles pour les deux portée et espace de noms correspondent à celles de la match.
portée est un peu complexe, mais offre plus d'options pour affiner exactement ce que vous voulez faire.
portée prend en charge trois options: module, le chemin et que. Si vous voyez portée avec toutes les options, il sera exactement le même que l'espace de noms.
En d'autres termes, routes générées par
est la même que
En d'autres termes, nous pouvons dire qu'il n'y a pas des options par défaut pour portée par rapport à l'espace de noms. espace de noms ajouter toutes ces options par défaut. Ainsi, à l'aide de portée, on peut plus ajuster les itinéraires en tant que de besoin.
Si vous prenez un regard profond dans portée et espace de noms comportement par défaut, vous trouverez que portée par défaut prend en charge uniquement les :chemin option, où que espace de noms prend en charge trois options module, le chemin et que par défaut.
Pour plus d'info, veuillez consulter un doc espace de noms et de routage.