我知道如何在路径文件中设置嵌套资源......问题在于如何使用相同的有效负载以及更少的行来执行此操作。
假设我有BlogSite
。 BlogSite有很多Posts
,但它也有很多Authors
和许多Dates
。 (这可能不是最好的例子,但请耐心等待。)
要在Post
上进行CRUD,我希望能够使用
/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.rb DRY
和理智的情况下维护可选的参数URL