Vous vous demandez peut-être quelle est la différence entre Scope et Namespace pour les routes dans votre application Rails. Il est important de connaître la différence, car elle affecte le chemin de vos ressources et des contrôleurs.
Namespace
Ceci est l’option simple. Lorsque vous utilisez namespace, le chemin de l’URL des ressources spécifiées est préfixé et le contrôleur est localisé sous un module nommé de la même manière que le namespace.
Avec le code suivant dans le fichier routes.rb,
namespace :admin do resources :user send
Vous allez vous retrouver avec les routes suivantes:
Prefix Verb URI Pattern Controller#Action admin_users GET /admin/users(.:format) admin/users#index POST /admin/users(.:format) admin/users#create admin_user GET /admin/users/:id(.:format) admin/users#show PATCH /admin/users/:id(.:format) admin/users#update PUT /admin/users/:id(.:format) admin/users#update DELETE /admin/users/:id(.:format) admin/users#destroy
Comme vous pouvez le constater, admin a été ajouté en tant que préfixe dans le chemin d’URI (/ admin/users) et en tant que module contenant le contrôleur (admin/users#index).
Avec ce code, Rails s’attend à ce que Admin::UsersController se trouve dans app /controllers/admin/users_controller.rb.
Scope
scope est un peu plus complexe, mais l’avantage, c’est qu’elle vous donne plus d’options pour ajuster exactement ce que vous voulez faire.
Son utilisation sans options :
Lorsque vous utilisez un scope sans aucune option et uniquement un nom, elle modifiera simplement le chemin des ressources.
# routes.rb scope :admin do resources :users end
Voici les routes générés:
Prefix Verb URI Pattern Controller#Action users GET /admin/users(.:format) users#index POST /admin/users(.:format) users#create user GET /admin/users/:id(.:format) users#show PATCH /admin/users/:id(.:format) users#update PUT /admin/users/:id(.:format) users#update DELETE /admin/users/:id(.:format) users#destroy
Comme vous pouvez le constater, /admin a été ajouté comme préfixe avant /users, mais le contrôleur des utilisateurs ne doit pas nécessairement se trouver dans un module.
Son utilisation avec avec options :
scope supporte trois options: module, path et as.
module
module nous permet de définir dans quel module le contrôleur pour les ressources incorporées vivra.
scope module: 'admin' do resources :users end
Prefix Verb URI Pattern Controller#Action users GET /users(.:format) admin/users#index POST /users(.:format) admin/users#create user GET /users/:id(.:format) admin/users#show PATCH /users/:id(.:format) admin/users#update PUT /users/:id(.:format) admin/users#update DELETE /users/:id(.:format) admin/users#destroy
path
path nous permet de définir le préfixe qui apparaîtra dans l’URI, avant le nom de la ressource.
scope module: 'admin', path: 'fu' do resources :users end
Prefix Verb URI Pattern Controller#Action users GET /fu/users(.:format) admin/users#index POST /fu/users(.:format) admin/users#create user GET /fu/users/:id(.:format) admin/users#show PATCH /fu/users/:id(.:format) admin/users#update PUT /fu/users/:id(.:format) admin/users#update DELETE /fu/users/:id(.:format) admin/users#destroy
as
Enfin, as peut être utilisé pour changer le nom de la méthode de chemin utilisée pour identifier les ressources.
scope module: 'admin', path: 'fu', as: 'cool' do resources :users end
Dans ce cas, nous avons maintenant cool comme préfixe pour les noms de chemin cool_users et cool_user.
Prefix Verb URI Pattern Controller#Action cool_users GET /fu/users(.:format) admin/users#index POST /fu/users(.:format) admin/users#create cool_user GET /fu/users/:id(.:format) admin/users#show PATCH /fu/users/:id(.:format) admin/users#update PUT /fu/users/:id(.:format) admin/users#update DELETE /fu/users/:id(.:format) admin/users#destroy
LIRE AUSSI: Comment intégré Google Analytics dans une application web Ruby On Rails ?
Amonce DEMBELE
1 Comment