6

를 해결하기 위해, 나는 다음과 같은 한 경로 정의를 다음과 같은 경로 결과 중첩 된 컨트롤러 레일 3.2.11에서

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

 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 

경로가 모두 올바른지 컨트롤러 라우팅은 resources :bangs에 대해서만 정확합니다. resources :barsbars 컨트롤러가 아닌 foos/bars 컨트롤러로 라우팅해야합니다.

이전에는 중첩 된 리소스를 처리하기 위해 foos/ 내에 네임 스페이스 컨트롤러를 설정할 수있었습니다.

#app/controllers/foos/bars_controller.rb 

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

그러나 이것은 더 이상 보이지 않습니다. 이 동작이 언제 변경되었으며 레일즈 3.2.11에서 같은 기능을 어떻게 얻을 수 있습니까?

편집 : 정확한 컨트롤러 매핑에서 resources :bangs 결과를 실현하지만 암묵적으로 수행 할 수 있기를 바랍니다. :foos 내에 여러 중첩 된 리소스가있는 경우 모든 리소스에 대해 컨트롤러를 정의하지 않아도됩니다.

답변

17

범위를 추가하여 모듈을 지정할 수 있습니다. Rails는 중첩 된 자원에 대한 컨트롤러가 자체 중첩되지 않는다고 가정합니다.

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

그래,이 방법이 그것을 할 수 있습니다. 나는 아직도이 질문을 여기에두고 왔다는 것을 잊었다. – CITguy

+0

다른 누군가가 귀하의 질문과 관련이 있다고 생각했습니다. –

+0

@PhillSparks,이 문제를 살펴볼 수 있습니까? 그것은 거의 같지만, 나는 그것을 이해할 수 없다. 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 

이 정보가 필요하지 않으십니까?

+0

예 아니오. ** 각 리소스에 대한 컨트롤러를 지정하지 않아도됩니다. 레일 2.3 앱에서 리소스를 중첩하면 올바른 경로와 컨트롤러를 매핑하는 데 충분했습니다. – CITguy