4

我已经知道如何在路由文件中设置嵌套资源了……问题是如何选择使用相同的有效负载和更少的行来完成它。

可以说我有一个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?

4

1 回答 1

4

尝试同时使用范围和资源。 Rails 3 在可选范围内使用资源进行路由

scope 'blog_sites/:blog_id)(/author/:author_id)(/date/:date_id)' do 
    resources :posts
end
于 2012-03-13T08:29:55.183 回答