给出RESTful API中嵌套资源的以下URL设计:
/magazines/:magazine_id/ads/:id POST
鉴于广告可以在杂志中单独识别广告,因此在杂志中识别杂志的理由是什么?
除了在向用户提供该URL或简单约定时它看起来更好。是否有更深层的含义或约束?
答案 0 :(得分:1)
嗯,这很大程度上取决于谁在发展。从理论上讲,没有必要。
事实上,Rails指南在2.7.2 Section (Shallow Nesting)中显示了这一点,只有当资源没有id时才可以嵌套资源:
resources :articles do
resources :comments, only: [:index, :new, :create]
end
resources :comments, only: [:show, :edit, :update, :destroy]
或者在你的情况下:
resources :magazines do
resources :ads, only: [:index, :new, :create]
end
resources :ads, only: [:show, :edit, :update, :destroy]
答案 1 :(得分:0)
鉴于广告ID可以在杂志中单独识别广告?
这是最常见的惯例,但不是通用约定。您可以在模型中覆盖to_param
,并违反通用数据库主键约定。想象一下,你也为杂志做过这个(例如用于SEO目的)。在这种情况下,包括路线中的杂志ID / slug可能是非常必要的。
答案 2 :(得分:0)
这正是"浅"作用:
resources :magazines do
resources :ads, shallow: true
end
表示与
完全相同resources :magazines do
resources :ads, only: [:index, :new, :create]
end
resources :ads, only: [:show, :edit, :update, :destroy]
中的浅嵌套