资源丰富路线的较短网址

时间:2011-07-07 11:47:09

标签: ruby-on-rails-3 resources routes

我认为这很简单,但无法在任何地方找到它。

我的网站有很多不同的型号,都是互相连接的。 让我们说:

  • 作者
  • 照片

书和照片都有作者,照片可以在书中。

resources :authors do
  resources :books

etc..

因此,使用嵌套的资源路由,我们得到类似的东西:

/authors/john-smith/photos/picture-of-a-house

/books/house-renovation/photos/picture-of-a-house

这些网址与我网站上的面包屑相匹配。 面包屑看起来像这样:

Home > Books > House Renovation > Photos > Picture of a House

问题是这些URL和面包屑变得太长,而且太“类似资源”。我的意思是,如果它使用/ categories / category_id / products / id格式,你可以从远处发现一个Rails网站。

有没有办法缩短这个,甚至可以让它变得漂亮? 它仍然需要Category和Product名称,但在此之前最多只需要一个参数。 类似的东西:

Book_Photos > House Renovation > Picture of a House

1 个答案:

答案 0 :(得分:0)

您可以通过简单地将:path选项传递到资源并将其设置为路径文件中的空字符串来实现此目的。

我刚刚玩过以下内容:

  resources :authors, :path => "" do
    resources :books, :path => ""
  end

在它生成的命令行上运行rake路由:

          author_books    GET    /:author_id(.:format)           books#index
                          POST   /:author_id(.:format)           books#create
          new_author_book GET    /:author_id/new(.:format)       books#new
         edit_author_book GET    /:author_id/:id/edit(.:format)  books#edit
              author_book GET    /:author_id/:id(.:format)       books#show
                          PUT    /:author_id/:id(.:format)       books#update
                          DELETE /:author_id/:id(.:format)       books#destroy
                  authors GET    /                               authors#index
                          POST   /                               authors#create
               new_author GET    /new(.:format)                  authors#new
              edit_author GET    /:id/edit(.:format)             authors#edit
                   author GET    /:id(.:format)                  authors#show
                          PUT    /:id(.:format)                  authors#update
                          DELETE /:id(.:format)                  authors#destroy

在解释可以做什么时,Rails Routing Guide非常彻底。