6

In Rails 3.2.11, ho le seguenti definizioni di percorsoOttenere Rails risorse nidificate al percorso per correggere controller annidati

resources :foos do 
    resources :bars 
    resources :bangs, :controller => 'foos/bangs' 
end 

che si traducono nei seguenti percorsi

 foo_bars GET /foos/:foo_id/bars(.:format)   bars#index 
       POST /foos/:foo_id/bars(.:format)   bars#create 
    new_foo_bar GET /foos/:foo_id/bars/new(.:format)  bars#new 
edit_foo_bar GET /foos/:foo_id/bars/:id/edit(.:format) bars#edit 
     foo_bar GET /foos/:foo_id/bars/:id(.:format)  bars#show 
       PUT /foos/:foo_id/bars/:id(.:format)  bars#update 
       DELETE /foos/:foo_id/bars/:id(.:format)  bars#destroy 
    foo_bangs GET /foos/:foo_id/bangs(.:format)   foos/bangs#index 
       POST /foos/:foo_id/bangs(.:format)   foos/bangs#create 
new_foo_bang GET /foos/:foo_id/bangs/new(.:format)  foos/bangs#new 
edit_foo_bang GET /foos/:foo_id/bangs/:id/edit(.:format) foos/bangs#edit 
    foo_bang GET /foos/:foo_id/bangs/:id(.:format)  foos/bangs#show 
       PUT /foos/:foo_id/bangs/:id(.:format)  foos/bangs#update 
       DELETE /foos/:foo_id/bangs/:id(.:format)  foos/bangs#destroy 
     foos GET /foos(.:format)       foos#index 
       POST /foos(.:format)       foos#create 
     new_foo GET /foos/new(.:format)      foos#new 
    edit_foo GET /foos/:id/edit(.:format)    foos#edit 
      foo GET /foos/:id(.:format)      foos#show 
       PUT /foos/:id(.:format)      foos#update 
       DELETE /foos/:id(.:format)      foos#destroy 

I percorsi sono tutti corretti , ma il routing del controller è corretto solo per resources :bangs. Lo resources :bars deve essere indirizzato al controller foos/bars anziché al controller bars.

Un tempo era possibile configurare i controller con nomi assegnati all'interno di foos/ per gestire la risorsa nidificata.

#app/controllers/foos/bars_controller.rb 

class Foos::BarsController < ApplicationController 
    #/foos/:foo_id/bar/:id available here 
end 

Tuttavia questo non sembra essere più il caso. Quando è cambiato questo comportamento e come ottengo la stessa funzionalità in Rails 3.2.11?

EDIT: Mi rendo conto che i risultati di resources :bangs nella mappatura del controller corretta, ma mi piacerebbe poterlo fare implicitamente. Se ho più risorse annidate all'interno di :foos, non voglio dover definire il controller per ogni risorsa.

risposta

17

È possibile aggiungere un ambito per specificare il modulo. Rails presuppone che i controller per le risorse nidificate non siano essi stessi nidificati.

resources :foos do 
    scope module: :foos do 
     resources :bars 
     resources :bangs 
    end 
end 
+0

Sì, questo è il modo per farlo. Ho dimenticato di avere questa domanda ancora qui. – CITguy

+0

Ho pensato che qualcun altro potrebbe ancora trovare la tua domanda pertinente. –

+0

@PhillSparks, puoi dare un'occhiata a questo problema? È quasi la stessa cosa, ma non riesco a capirlo. http://stackoverflow.com/questions/35672666/rails-structuring-routes-controller-views-for-nested-resources –

1
resources :foos do 
    resources :bars, :controller -> 'foos/bars' 
    resources :bangs, :controller => 'foos/bangs' 
end 

Non è questo quello che ti serve?

+0

Sì e no. Mi piacerebbe ** NON ** dover specificare il controller per ogni risorsa. In un'app per binari 2,3, l'annidamento delle risorse era sufficiente per mappare il percorso e i controllori corretti. – CITguy