使用嵌套路由Rails 3而不实际允许访问父资源

Cou*_*ney 21 nested-routes ruby-on-rails-3

我正在使用Rails 3,我有两个型号的EquipmentGroup和Reservation.我希望预订成为设备组的嵌套资源,以便我可以使用以下URL访问它们:

/equipment_groups/:equipment_group_id/reservations/:id
Run Code Online (Sandbox Code Playgroud)

但是,我不想为设备组创建路由.我可以通过以下方式实现这一点,但它似乎是一个黑客:

resources :equipment_groups, :only => [] do
  resources :reservations
end
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?我似乎无法在文档中轻松找到答案.

小智 8

你的方法 - 这是一种标准的方法,没有比这更好的了.


Log*_*ger 0

我可以想出几种方法来做到这一点。一种方法是您上面所做的。但是,似乎您不需要公开设备组控制器或其任何操作,因此以下操作应该很好:

scope "/equipment_groups" do
    resources :reservations
end
Run Code Online (Sandbox Code Playgroud)

scope块会将“/equipment_groups”附加到其中的每条路线。这本质上是“伪造”一个嵌套路由。

  • 通过使用“scope”而不是“resources”,您会失去一些 url 生成的魔力。例如,“equipment_group_reservation_path(@equipment_group, @reservation)”将不起作用。我更喜欢问题本身建议的解决方案,并且我不认为它是黑客。 (3认同)