2009-11-13 3 views
0

그래서 내 레일 앱에는 사용자에게 속한 두 가지 리소스 (대여 및 예약)가 있습니다. 이것은 내 routes.rb에있는 코드로 중첩 된 경로를 설정합니다.다중 중첩 경로 (Nested Routes), 더 좋은 방법이 있습니까?

map.resources :users, :has_many => :reservations, :shallow => true 
    map.resources :users, :has_many => :rentals, :shallow => true 
    map.resources :rentals, :only => [:index] 
    map.resources :reservations, :only => [:index] 

더 많은 방법이 있습니까? 내가 검색 좀 해봤지만 명확한 답변을 찾을 수 없습니다.

미리 감사드립니다.

- 선

답변

6

rake routes을 실행하면 볼 수 있듯이 메서드에서 사용자 경로를 복제합니다. 당신은 map.resources에 블록을 전달하여 그 문제를 해결할 수 : 생성

map.resources :users, :shallow => true do |user| 
    user.resources :reservations 
    user.resources :rentals 
end 

중첩 된 노선들은 항상 중첩 된 방식으로 해당 리소스에 액세스하려는 것으로 가정합니다. 당신이 정말로 (비 중첩 대여 및 예약 인덱스 포함)가 정의한 모든 경로를해야하는 경우

당신은 추가해야합니다

map.resources :rentals, :only => [:index] 
map.resources :reservations, :only => [:index] 

을 그리고 건조기 방법을 알고하지 않습니다 하기 위해서.

1

당신은 내가 이런 식으로 좀 더 명확하고 당신이 중 하나에 추가 옵션을 필요로 할 때 더 쉽게 나중에 조정할 수 있다고 생각

map.resources :users, :shallow => true do |user| 
    user.resources :reservations, :only => [:index] 
    user.resources :rentals, :only => [:index] 
end 

블록 중첩 된 경로를 정의 할 수 있습니다 중첩 된 자원.

서로 다른 옵션과 세부 사항은 사용자 아래 ActionController Resources API page

+0

kchau의 답변에서 남긴 동일한 의견 : 모든 경로가 원본으로 생성되지는 않습니다. – ScottJ

1

둥지에있는 두 개의 자원입니다 :

map.resources :users, :shallow => true do |users| 
    users.resources :reservations, :only => :index 
    users.resources :rentals, :only => :index 
    end 

편집 : 얕은 옵션 : 죄송합니다를 잊어 버렸습니다.

+0

이렇게하면 모든 경로가 원본으로 생성되지는 않습니다. OP에는 중첩 된 경로의 전체 목록과 중첩되지 않은 경로 (색인)가 있습니다. – ScottJ

+0

ScottJ이 맞습니다. 제 코드 조각은 OP가 원하는 경로의 하위 집합만을 생성합니다. – kafuchau

관련 문제