0

因此,在我的 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]

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

提前致谢。

-射线

4

3 回答 3

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 的方法可以做到这一点。

于 2009-11-13T02:43:59.733 回答
1

您可以使用块定义嵌套路由

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

我觉得这种方式更清晰一些,并且当您需要在其中一个嵌套资源上添加其他选项时,可以更轻松地进行调整。

不同的选项和详细信息位于ActionController 资源 API 页面

于 2009-11-13T02:05:43.820 回答
1

嵌套用户下的两个资源:

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

编辑:对不起,忘记了 :shallow 选项。

于 2009-11-13T02:07:26.747 回答