1

这是一个相当基本的问题,但我无法在网上找到具体的答案。每个has_many belongs_to不需要嵌套路由正确吗?当您查找表单的 URL 时,您是否应该只使用嵌套路由class/:id/class/:id

例如,假设我有两个班级ProfilePost.

型号/配置文件

has_many :posts

模型/帖子

belongs_to :profile

没有单独的postURL,posts显示在profiles/show. 路由(在这种情况下,它只是像 :new、:create 和 :destroy 这样的操作)是否应该post嵌套在:profiles资源中?rails 指南指出,资源的嵌套深度不应超过一层,而且经常嵌套。为每个关联制作嵌套资源似乎很快就会违反此规则。提前致谢!

4

2 回答 2

3

如果您没有使用/profile/1/posts/profile/1/posts/1不需要嵌套路由。但是,我敦促您重新考虑,嵌套路由可以生成干净的 RESTful API

例如,整洁的小嵌套路由:

resources :profile, :shallow => true do
  resources :posts
end

将为您提供所有这些真正有用的路线:

   profile_posts GET /profile/:profile_id/posts(.:format) 帖子#index
                 POST /profile/:profile_id/posts(.:format) 帖子#create
new_profile_post GET /profile/:profile_id/posts/new(.:format) 帖子#new
       edit_post GET /posts/:id/edit(.:format) 帖子#edit
            发布 GET /posts/:id(.:format) 帖子#show
                 PUT /posts/:id(.:format) 帖子#update
                 删除 /posts/:id(.:format) 帖子#destroy
   profile_index GET /profile(.:format) profile#index
                 POST /profile(.:format) profile#create
     new_profile GET /profile/new(.:format) profile#new
    edit_profile GET /profile/:id/edit(.:format) profile#edit
         profile GET /profile/:id(.:format) profile#show
                 PUT /profile/:id(.:format) profile#update
                 删除 /profile/:id(.:format) profile#destroy

这样,您必须在必要/有用时自由选择嵌套路由,例如

GET /profile/:profile_id/posts/new(.:format) # create a new post for the given profile_id
GET /profile/:profile_id/posts(.:format) # return all posts for the given profile_id

并使用不需要嵌套路由的浅层路由

于 2013-04-15T22:13:18.667 回答
1

如果您阅读 Ruby on Rails 指南的第 2.7 节,它会指出:

嵌套路由允许您在路由中捕获这种关系。

请参阅 - http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default以供参考。

除此之外,您可能希望对user具有create等的类执行特定操作edit...每个用户都与特定预订相关联。这意味着每当您对用户做任何事情时,您实际上是在对用户/预订做某事。因为这与此有关。

RESTful 路由是一种设置应用程序并充分利用统一资源标识符的干净方式。这方面的一个示例是识别特定用户,例如 /users/1/bookings/3 这将显示第一个用户。

于 2013-04-16T02:45:04.600 回答