L'autre jour, j'ai résumé les différences entre les ressources et les ressources, mais il y avait quelques points à noter lors de leur utilisation en combinaison, alors je les ai résumés. Cliquez ici pour la différence → Différence entre les ressources et les ressources - Qiita
En utilisant des ressources en combinaison, vous pouvez facilement générer le routage suivant.
Tout le monde peut afficher la liste de tous les utilisateurs et les détails de chaque utilisateur, mais seuls les siens peuvent modifier les informations utilisateur.
config/routes.rb
resources :users, only: [:index, :show]
resource :user, only: [:show, :edit, :update]
En regardant les routes générées par les rails routes
, cela ressemble à ce qui suit.
Terminal
Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
user GET /users/:id(.:format) users#show
edit_user GET /user/edit(.:format) users#edit
GET /user(.:format) users#show
PATCH /user(.:format) users#update
PUT /user(.:format) users#update
ʻUser GET / users /: id (.: Format) La partie de users # show`, user_path est assignée à / users /: id, donc la méthode d'assistance qui doit retourner / user n'est pas générée. Alors, j'ai essayé de le décrire dans l'ordre inverse.
config/routes.rb
resource :user, only: [:show, :edit, :update]
resources :users, only: [:index, :show]
En regardant les routes générées par les rails routes
, cela ressemble à ce qui suit.
Terminal
Prefix Verb URI Pattern Controller#Action
edit_user GET /user/edit(.:format) users#edit
user GET /user(.:format) users#show
PATCH /user(.:format) users#update
PUT /user(.:format) users#update
users GET /users(.:format) users#index
GET /users/:id(.:format) users#show
Si l'utilisateur local peut être identifié par la fonction de connexion (gestion de session), il n'est pas nécessaire d'inclure: id dans la requête, de sorte que le routage pour l'utilisateur local utilise "resource".
Afin de voir l'écran des détails des utilisateurs autres que vous-même, il est nécessaire de spécifier l'ID de l'utilisateur cible, ainsi resources
génère une route qui inclut: id dans la demande.
Lors de la création d'un routage en combinant «ressource» utilisée au singulier et «ressources» utilisée au pluriel, écrivez la forme singulière «ressource» ci-dessus.