2015-04-23 46 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 –