2015-08-29 14 views
5

Voglio avere coerenza nella convenzione di denominazione dei miei percorsi. Il parametro predefinito è :id per qualsiasi risorsa. Tuttavia, se ne annida un'altra risorsa, il parametro della risorsa padre cambia in :parent_id. mio percorso assomiglia:Parametri di override in percorsi nidificati

resources :users do 
    resources :projects do 
    resources :issues 
    end 
end 

Per il modello utente che genererebbe url come :id, per il progetto URL verrà :user_id/:id e per le questioni URL sarà :user_id/:project_id/:id. Ho cercato di sovraccaricare il parametro predefinito in base this

resources :users, param: :user_id do 
    resources :projects, param: :project_id do 
    resources :issues, param: :issue_id 
    end 
end 

Esso genera url del tipo: :user_user_id/:project_project_id/:issue_id. Dal momento che sto scavalcando, vorrei che quell'aggiunta predefinita della risorsa genitore fosse disattivata. Voglio che i miei percorsi appaiano come :user_id/:project_id/:issue_id e voglio che sia coerente per tutti i modelli. cioè il progetto dovrebbe essere mappato a :user_id/:project_id.

risposta

8

Ecco come ho fatto ... non so se ci sia un modo migliore ma dovrebbe fare il trucco ...

resources :users, param: :user_id 

resources :users, only: [] do 
    resources :projects, param: :project_id 
end 

resources :users, only: [] do 
    resources :projects, only: [] do 
    resources :issues, param: :issue_id 
end 
end 
0

Prova questi itinerari in routes.rb

resources :users, :key => :user_id do 
    resources :projects, :key => :project_id do 
     resources :issues, :key => :issue_id 
    end 
    end 
+0

Spiacente Haider, ma aggiunge solo una chiave per gli elenchi di parametri: 'Parametri: {" chiave "=>: id_progetto," id_utente "=>" addie "," id "= > "new_project"} ' – sonalkr132

+0

@ sonalkr132 si desidera convertire'/customers /: customer_id/projects /: project_id/issues' in '/: user_user_id /: project_project_id /: issue_id' ???? –

+0

No! Lo voglio in un altro modo. cioè ': user_user_id /: project_project_id /: issue_id' a': user_id /: project_id /: issue_id'. L'override del param genera il primo. – sonalkr132

3

provare member:

resources :users, param: :user_id do 
    member do 
    resources :projects, param: :project_id do 
     member do 
     resources :issues, param: :issue_id 
     end 
    end 
    end 
end 

questo codice genererà i seguenti percorsi:

 issues GET /users/:user_id/projects/:project_id/issues(.:format)    issues#index 
      POST /users/:user_id/projects/:project_id/issues(.:format)    issues#create 
    new_issue GET /users/:user_id/projects/:project_id/issues/new(.:format)   issues#new 
    edit_issue GET /users/:user_id/projects/:project_id/issues/:issue_id/edit(.:format) issues#edit 
     issue GET /users/:user_id/projects/:project_id/issues/:issue_id(.:format)  issues#show 
      PATCH /users/:user_id/projects/:project_id/issues/:issue_id(.:format)  issues#update 
      PUT /users/:user_id/projects/:project_id/issues/:issue_id(.:format)  issues#update 
      DELETE /users/:user_id/projects/:project_id/issues/:issue_id(.:format)  issues#destroy 
    projects GET /users/:user_id/projects(.:format)         projects#index 
      POST /users/:user_id/projects(.:format)         projects#create 
new_project GET /users/:user_id/projects/new(.:format)        projects#new 
edit_project GET /users/:user_id/projects/:project_id/edit(.:format)     projects#edit 
    project GET /users/:user_id/projects/:project_id(.:format)      projects#show 
      PATCH /users/:user_id/projects/:project_id(.:format)      projects#update 
      PUT /users/:user_id/projects/:project_id(.:format)      projects#update 
      DELETE /users/:user_id/projects/:project_id(.:format)      projects#destroy 
     users GET /users(.:format)              users#index 
      POST /users(.:format)              users#create 
    new_user GET /users/new(.:format)             users#new 
    edit_user GET /users/:user_id/edit(.:format)          users#edit 
     user GET /users/:user_id(.:format)           users#show 
      PATCH /users/:user_id(.:format)           users#update 
      PUT /users/:user_id(.:format)           users#update 
      DELETE /users/:user_id(.:format)           users#destroy 

Tuttavia, nota che gli aiutanti non sono le stesse come nella risposta accettata.

È possibile utilizzare l'opzione 'come' per evitarlo. Soluzione più agile con: https://stackoverflow.com/a/41323489/2405850

Problemi correlati