Ruby on Rails ubuntu

Rails 5 : Comprendre la différence entre Scope et Namespace

Partagez sur:

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


Partagez sur: