【问题标题】:Ruby On Rails and Routes file structureRuby On Rails 和 Routes 文件结构
【发布时间】:2015-07-01 02:12:16
【问题描述】:

我想知道以下对于路由文件中的路由是否是可接受的结构。我还没有看到一个完全以这种方式完成的例子,但它看起来确实合乎逻辑。如果不是,请告诉我原因。

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/ 

【问题讨论】:

  • 您可以运行rake routes自己查看路线。
  • @ArieShaw 我问它是否是通过以我的方式嵌套它们来接受的路由结构。耙子没有问题!我只是想知道这是否违反任何 ROR 编程范式。
  • 结构对我来说看起来不错,在 Rails 中允许使用 namespace 嵌套结构,但除非绝对需要,否则不应使用深层嵌套
  • 你评论路由文件的方式对我来说很奇怪:)

标签: ruby-on-rails ruby nested-routes


【解决方案1】:

@ArieShaw 是对的。如果 rake 路由有效,则它是“可接受的”。

但是,像这样创建您的路线将意味着您将错过一些为您提供的神奇铁轨。特别是,您需要创建自定义控制器操作。

例如,您的销售区域:

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

我会重构它并创建 Lead 和 ContactLog 对象(可能在 Sales 命名空间模块中)。然后我会使用:

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 控制器上的 index、new、create、edit、update、show 和 destroy 方法。

我也不会在 sales 命名空间中处理登录,而是使用诸如 Devise 之类的 gem。

欲了解更多信息,请查看:http://guides.rubyonrails.org/routing.html

总而言之:您在示例中所做的并没有错,如果您被要求创建这些特定路径,这可能是一种很好的方法。但是,由于不使用某些 Rails 宁静路线,您的工作可能会比实际需要的更加困难。

【讨论】:

  • 谢谢!这就是我所担心的。所以在那种情况下,我将重构回我拥有的东西,然后做资源。您的回复是最有帮助的,给它一个 +1
猜你喜欢
  • 2023-01-19
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2014-09-08
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多