2011-03-15 2 views
18

레일즈 3을 사용하고 있으며 EquipmentGroup과 Reservation의 두 모델이 있습니다. 그러나, 나는 장비 그룹에 대한 경로를 생성하지 않으중첩 된 경로 사용하기 실제로는 상위 리소스에 대한 액세스를 허용하지 않고 레일즈 3

/equipment_groups/:equipment_group_id/reservations/:id 

: 내가 좋아하는 URL을 액세스 할 수 있도록 내가 예약 장비 그룹의 중첩 된 자원되고 싶어요. 나는 다음을 통해이를 달성 할 수 있지만, 해킹처럼 보인다 :

resources :equipment_groups, :only => [] do 
    resources :reservations 
end 

이 작업을 수행 할 수있는 더 나은 방법이 있나요? 설명서에서 쉽게 답변을 찾을 수없는 것 같습니다.

답변

1

이 작업을 수행하는 몇 가지 방법을 생각해 볼 수 있습니다. 한 가지 방법은 위에서 한 것입니다.

scope "/equipment_groups" do 
    resources :reservations 
end 

scope 블록이 모든 경로에 "/ equipment_groups"를 추가합니다 : 당신이 장비 그룹 컨트롤러 또는 작업 중 하나를 노출 할 필요가없는 것처럼 다음은 잘해야하므로 그러나, 그것은 보인다 . 이것은 기본적으로 중첩 된 라우트를 "가짜"로 만듭니다.

+2

'resources' 대신'scope'을 사용하면 URL 생성의 마법을 잃게됩니다. 예를 들어,'equipment_group_reservation_path (@equipment_group, @reservation)'는 작동하지 않습니다. 나는 그 문제 자체에서 제안 된 해결책을 선호하며, 나는 그것을 해킹으로 간주하지 않는다. –

+0

이것은 작동하지 않습니다! 이 방법을 사용하면 유사하지만 부모 ID가없고 경로를 생성하는 데 도움이되는 경로는 갖게됩니다. – kaleb4eg

5

접근 방식 - 표준 방식이기 때문에 더 좋은 방법은 없습니다.

관련 문제