2011-07-15 110 views
0

我現在有這些路線(簡化版)在軌複雜的嵌套路線/資源避免重複3

resources :licenses, :except => [:show] do 
    collection do 
     post :search 
     get :search 
    end 
    member do 
     post :activate 
     post :revoke 
     post :suspend 
    end 
    end 

    resources :clients, :except => [:show] do 
    resources :licenses, :except => [:show] do 
     collection do 
     post :search 
     get :search 
     end 
     member do 
     post :activate 
     post :revoke 
     post :suspend 
     end 
    end 
    end 

凡許可證控制器可以處理被嵌套在客戶端或不是,如果是那麼只有那些客戶的許可證可以訪問。

這似乎不是很乾,雖然,有沒有更好的方式來表示這些路由,以便如果我改變許可證的路由簽名我沒有改變它的客戶呢?

回答

1

好的,我終於花了一些時間尋找這個,並記住設計寶石(和其他人)有自定義'路線助手'(如devise_for),所以我借用了他們的方法,發現它很實用:

對於我的項目,這些都在routes.rb中,但'helper'方法可能在需要的時候可以到別處。

module ActionDispatch::Routing 

    class Mapper 

    def report_routes 
     resources :reports, :except => [:create] do 
     member do 
      get :download 
     end 
     end 
    end 

    def website_routes 
     resources :websites do 
     member do 
      post :enable 
      post :disable 
     end 
     end 

    end 

    end 

end 

MyApp::Application.routes.draw do 

    website_routes 

    report_routes 

    resources :clients do 
    website_routes 
    report_routes 
    end 

end