Файловая структура 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
Итак, то, что вы делаете в своем примере, не является неправильным, и если вас просят создать эти конкретные пути, это может быть хорошим способом сделать это. Тем не менее, вы делаете свою работу немного сложнее, чем это может потребоваться, не используя некоторые из рельсов спокойных маршрутов.