2011-07-07 4 views
2

これは些細なことだと思っていましたが、どこでも見つけることができません。リソースの多いルートの短いURL

私のサイトにはさまざまなモデルがあり、それらはすべて相互に接続されています。 さんが言ってみましょう:

  • 著者
  • 写真

本との両方は、著者を持っている写真、及び写真が本の中身をすることができ

  • ブック。これらのURLは私が私のサイト上で持ってパン粉と一致

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

    または

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

    だから、
    resources :authors do 
        resources :books 
    
    etc.. 
    

    は、ネストされた機知ルートを使用して、我々は次のようなものを取得します。 ブレッドクラムは次のようになります。

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

    問題は、これらのURLとパン粉があまりにも長くなるということである、とあまりにも「資源様」。つまり、/ categories/category_id/products/idフォーマットを使用している場合、遠くからRailsウェブサイトを見つけることができます。

    これを短縮する方法はありますか、それを美しくする方法はありますか? それでもCategoryとProductの両方の名前が必要ですが、その前に最大1つのパラメータが必要です。 のような何か:

    Book_Photos > House Renovation > Picture of a House 
    
  • 答えて

    0

    あなたのルートファイルで、単にあなたのリソースに:pathオプションで渡すと空の文字列に設定することで、これを行うことができるかもしれません。

    私は次のように周りにプレイしました:

    それは、これを作成コマンドラインですくいルートを実行
    resources :authors, :path => "" do 
        resources :books, :path => "" 
        end 
    

    :それは何を説明することになると

      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はかなり徹底していますすることができます。