2015-04-23 88 views
1

我在想如果以下路由文件中的路由結構可以接受。我還沒有看到過這樣做的例子,但它看起來合乎邏輯。如果不是,請讓我知道爲什麼。Ruby On Rails和Routes文件結構

Rails.application.routes.draw do 
### BEGIN /some_base_route/ 
namespace :some_base_route do 
### BEGIN /some_base_route/lead_vendor 
namespace :lead_vendor do 
    get 'import' 
    get 'results' 
end 
### END /some_base_route/lead_vendor 

### BEGIN /some_base_route/sales/ 
namespace :sales do 
    get 'view_lead' 
    get 'edit_lead' 
    post 'edit_lead' 
    get 'create_contact_log' 
    get 'login' 
    get 'dashboard' 
end 
### END /some_base_route/sales/ 

### BEGIN /some_base_route/admin/ 
namespace :admin do 
    get 'admin/login' 
    get 'admin/dashboard' 
end 
### END /some_base_route/admin/ 

### BEGIN /some_base_route/process/ 
namespace :process do 
    ### BEGIN /some_base_route/process/sales 
    namespace :sales do 
    ### BEGIN /some_base_route/process/sales/leads 
    namespace :leads do 
     get 'create' 
     get 'edit' 
     get 'delete' 
     get 'call_log_create' 
    end 
    ### END /some_base_route/process/sales/leads 
    end 
    ### END /some_base_route/process/sales 

    ### BEGIN /some_base_route/process/new_client 
    namespace :new_client do   
    get 'new_client/step1' 
    get 'new_client/step2' 
    get 'new_client/step3' 
    get 'new_client/step4' 
    get 'new_client/step5' 
    get 'new_client/step6' 
    end 
    ### END /some_base_route/process/new_client 

    ### BEGIN /some_base_route/process/admin/ 
    namespace :admin do 
    ### BEGIN /some_base_route/process/admin/user_management/ 
    namespace :user_management do 
     get 'create' 
     get 'edit' 
     get 'delete' 
     get 'disable' 
    end 
    ### END /some_base_route/process/admin/user_management/ 

    ### BEGIN /some_base_route/process/admin/services/ 
    namespace :services do 
     get 'create' 
     get 'edit' 
     get 'delete' 
    end 
    ### END /some_base_route/process/admin/services/ 
    end 
    ### END /some_base_route/process/admin/ 
end 
### END /some_base_route/process/ 
end 
### END /some_base_route/ 
+5

您可以運行'rake routes'來自己檢查路線。 –

+1

@ArieShaw我在問,如果這是一個接受的路線結構,以我的方式嵌套它們。 Rake的工作沒有問題!我只是想知道這是否違反任何ROR編程範式。 –

+1

結構對我來說看起來不錯,嵌套結構允許在Rails中使用'namespace',但是除非絕對需要,否則不應該使用深層嵌套 –

回答

2

@ArieShaw是對的。如果耙路線起作用,它是「可接受的」。

但是,像這樣創建你的路線意味着你會錯過一些神奇的軌道給你。特別是,您需要創建自定義控制器操作。

例如,您的銷售區域:

namespace :sales do 
    get 'view_lead' 
    get 'edit_lead' 
    post 'edit_lead' 
    get 'create_contact_log' 
    get 'login' 
    get 'dashboard' 
end 

我是重構和(或許內的銷售名稱空間模塊)創建鉛ContactLog對象。然後我會使用:

namespace :sales do 
    resources :leads 
    resources :contact_logs, only: [:create, :new] 
end 

這會給你:

get sales/leads - index view of leads (probably equivalent to your dashboard view) 
get sales/leads/new - form for new lead 
post sales/leads - create a new lead 
get sales/leads/:id - view one lead 
get sales/leads/:id/edit - edit a lead 
patch sales/leads/:id - update a lead 
delete sales/leads/:id - delete a lead 
get sales/contact_logs/new - form for new contract log 
post sales/contact_logs - create a contract log 

而且這些行動都將匹配指數,新,創建,編輯,更新,顯示,並破壞對LeadsController方法和ContactLogsController控制器。

我也不會在銷售名稱空間內處理登錄,而是使用諸如Devise之類的寶石。

欲瞭解更多信息,看看這個:http://guides.rubyonrails.org/routing.html

總結:你在你的例子在做什麼是沒有錯的,如果你被要求創建這些特定的路徑,很可能是一個很好的做法。但是,由於不使用某些導軌寧靜的路線,您正在使您的工作比需要的要難一些。

+1

謝謝!這就是我所關心的。所以在那種情況下,我會重構我所擁有的資源。你的迴應是最有幫助的,給它一個+1 –