Обычно при рассмотрении функций администратора, которые часто предоставляют пользователю совершенно другой интерфейс с проверкой прав доступа, основанной больше на том, «что-то сломает», чем «если вам позволят», целесообразно создать область администратора с отдельными контроллерами , Например:
map.namespace :admin do |admin|
# Admin::PracticionersController
map.resources :practicioners
# Admin::TreatmentsController
map.resources :treatments
end
map.resources :practicioners do |practicioner|
practicioner.resources :treatments
end
map.resources :treatments do |treatment|
treatment.resources :practicioners
end
Все контроллеры Admin :: * могут наследовать от чего-то, например Admin :: BaseController, который выполняет достаточно строгую проверку подлинности, прежде чем разрешить выполнение каких-либо действий.
В большинстве приложений, которые я видел, пользовательский интерфейс имеет элемент дизайна или стиля, где его компоновка часто ограничена элементами навигации, рекламой или другим редакционным контентом. Создание отдельного административного представления, которое не перегружено, показывает гораздо больше информации на страницу и позволяет сортировать или искать в измерениях, не представленных пользователю, очень ценно при управлении даже наборами данных среднего размера.
Хотя создание дополнительных контроллеров администратора и связанных с ними форм может показаться большой работой, но если вы будете осторожны в своем дизайне, вы можете перерабатывать большую часть функциональности между двумя областями, особенно частичные страницы.