多个嵌套路由,有更好的方法吗?

时间:2009-11-13 01:09:32

标签: ruby-on-rails routing nested-resources

所以在我的rails应用程序中,我有两个属于用户的资源(租赁和预订)。这是我的routes.rb中的代码,用于设置嵌套路由。

  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]

是否有更好的方法来做到这一点。我做了一些谷歌搜索,但我找不到一个明确的答案。

提前致谢。

射线

3 个答案:

答案 0 :(得分: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]

我不知道DRYer的做法。

答案 1 :(得分:1)

您可以使用块

定义嵌套路径
map.resources :users, :shallow => true do |user|
  user.resources :reservations, :only => [:index]
  user.resources :rentals, :only => [:index]
end

我觉得这种方式更加清晰,以后可以更容易地在其中一个嵌套资源上使用其他选项进行调整。

不同的选项和详细信息位于ActionController Resources API page

答案 2 :(得分:1)

将两个资源嵌在用户下面:

  map.resources :users, :shallow => true do |users|
    users.resources :reservations, :only => :index
    users.resources :rentals, :only => :index
  end
编辑:抱歉,忘了:浅选项。