2011-03-15 12 views
18

Estoy usando Rails 3 y tengo dos modelos EquipmentGroup y Reservation. Quiero reservas para ser un recurso anidado de grupos de equipo para que pueda acceder a ellos con URLs como:Usar rutas anidadas Rails 3 sin permitir realmente el acceso al recurso principal

/equipment_groups/:equipment_group_id/reservations/:id 

Sin embargo, no quiero crear rutas para los grupos de equipos. Puedo lograr esto a través de lo siguiente, pero parece un truco:

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

¿Hay una mejor manera de hacerlo? Parece que no puedo encontrar una respuesta fácilmente en la documentación.

Respuesta

1

Se me ocurren algunas formas de hacerlo. Una forma es lo que has hecho arriba. Sin embargo, parece que usted no tiene ninguna necesidad de exponer el controlador de grupos de equipo o cualquiera de sus acciones, por lo que el siguiente debe hacer muy bien:

scope "/equipment_groups" do 
    resources :reservations 
end 

El bloque scope anexará "/ equipment_groups" a todas las rutas en ella . Esto esencialmente "falsificará" una ruta anidada.

+2

Al usar 'scope' en lugar de' resources', se pierde algo de la magia de la generación de url. Por ejemplo, 'equipment_group_reservation_path (@equipment_group, @reservation)' no funcionará. Prefiero la solución sugerida en la pregunta en sí, y no lo considero un hack. –

+0

¡Esto no funcionará! con este enfoque, tendrás una ruta similar pero sin ID padre y sin ayuda para generar rutas. – kaleb4eg

5

Su enfoque: es un enfoque estándar, no hay nada mejor.

Cuestiones relacionadas