我已经知道如何在路由文件中设置嵌套资源了……问题是如何选择使用相同的有效负载和更少的行来完成它。
可以说我有一个BlogSite
. BlogSite 有很多Posts
,但它也有很多Authors
很多Dates
。(这可能不是最好的例子,但请耐心等待)。
要在 a 上执行 CRUD Post
,我希望能够使用
/blog_sites/1/author/2/date/3/posts #all posts on site 1 from author 2 on date 3
/blog_sites/1/author/2/posts #all posts on site 1 from author 2
/blog_sites/1/date/3/posts #all posts on site 1 on date 3
/blog_sites/1/posts #all posts on site 1
/author/2/date/3/posts #all posts from author 2 on date 3
/author/2/posts #all posts from author 2
/date/3/posts #all posts from date 3
/posts #all posts
这样任何过滤参数在 URL 中都是可选的。我知道你可以使用类似的东西
get (/blog_sites/:blog_id)(/author/:author_id)(/date/:date_id)/posts => "posts#index"
但我不想失去使用嵌套资源路由的所有 CRUD 好处。目前我必须复制大部分路由以使其工作,并且正在寻找一种更好的方法来做到这一点:
resources :blog_sites do
resources :authors do
resources :dates do
resources :posts
end
resources :posts
end
resources :dates do
resources :posts
end
resources :posts
end
… 等等。它很快就会变得非常难以管理。
如何在保持 routes.rbDRY
和理智的同时维护可选参数 url?