4

私はすでにルートファイルにネストされたリソースを設定する方法を知っています...問題は、オプションで同じペイロードを使用して行を減らす方法です。Railsルート、has_many、および任意でネストされたリソースサニティ?

私は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とsaneを維持しながら、オプションのparam URLをどのように維持できますか?

答えて

4

スコープとリソースを一緒に使用してください。 Rails 3 routing with resources under an optional scope

scope 'blog_sites/:blog_id)(/author/:author_id)(/date/:date_id)' do 
    resources :posts 
end 
+0

私は、次のリソースに、きれいに、各ライン上の条件にのparamsの全てを指定することができるように、私は、ネストされたスコープを使用するが、これは、私はそれを解決することになった正確にどのようにしました – coneybeare