Файловая структура 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/ 

1 ответ

Решение

@ArieShaw прав. Если грабли работают, это "приемлемо".

Тем не менее, создание таких маршрутов будет означать, что вы пропустите некоторые из магических маршрутов. В частности, вам нужно будет создать собственные действия контроллера.

Например, ваша торговая зона:

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

И все эти действия будут соответствовать методам index, new, create, edit, update, show и destroy на контроллерах LeadsController и ContactLogsController.

Я бы также не обрабатывал логин в пространстве имен продаж, а использовал бы такой драгоценный камень, как Devise.

Для получения дополнительной информации, посмотрите на это: http://guides.rubyonrails.org/routing.html

Итак, то, что вы делаете в своем примере, не является неправильным, и если вас просят создать эти конкретные пути, это может быть хорошим способом сделать это. Тем не менее, вы делаете свою работу немного сложнее, чем это может потребоваться, не используя некоторые из рельсов спокойных маршрутов.

Другие вопросы по тегам