2017-08-17 4 views
0

je l'itinéraire suivant:routes avec de mauvaises params

resources :users, only: [] do 
    resources :events, only: %i[index] 
    delete :close_account, on: :member 
end 

pour une raison quelconque, il générer des itinéraires avec différents params:

 GET  /backoffice/users/:user_id/events(.:format)    backoffice/events#index 
     DELETE /backoffice/users/:id/close_account(.:format)    backoffice/users#close_account 

dans un itinéraire, le PARAM est user_id et l'itinéraire ci-dessous est id. Je voulais être à la fois à user_id, alors j'ai ajouté resources :users, param: :user_id

et maintenant les routes sont plus étrange que jamais:

 GET  /backoffice/users/:user_user_id/events(.:format)   backoffice/events#index 
     DELETE /backoffice/users/:user_id/close_account(.:format)  backoffice/users#close_account 

comment puis-je résoudre ce problème des itinéraires de telle sorte que les deux voies ont la même param?

Répondre

2

Les paramètres ne sont pas "faux". La raison pour laquelle vous voyez ce comportement est que le nom du paramètre id est réservé à la ressource la plus interne. C'est-à-dire, si votre EventsController avait d'autres actions en plus de index, il recevrait l'ID d'événement comme id, tandis que l'ID User associé serait user_id. L'autre route n'est pas une ressource imbriquée et n'a donc pas besoin de préfixes différents.

Ceci peut être vu dans le Rails guides section on nested resources.

Cela étant dit, si vous voulez vraiment être à la fois à appelé user_id, vous devez utiliser

delete "/backoffice/users/:user_id/close_account/", to: "backoffice/users#close_account" 
+0

J'ai lu le guide, mais il semble que je ne l'ai pas fait attention à cette partie :(particulièrement bien , c'est tout à fait logique! –