Отношения «многие ко многим» в Rails со случайными вложенными маршрутами

StackOverflow https://stackoverflow.com/questions/2514486

Вопрос

Поскольку я узнаю больше о рельсах и отхожу от своего дизайнерского мышления со времен ASP.Net, сегодня утром я обдумывал сценарий, но не знал, возможно ли это сделать.

Практикующие врачи имеют множество методов лечения через службы – и наоборот.

В моей панели управления у меня есть область, где практикующие врачи могут редактировать свои данные (имена, контактную информацию и т. д.), а также могут выбирать методы лечения с помощью флажков.

Я хотел бы удалить флажки из формы _form.Имея собственную форму, которую я мог бы вызвать следующим образом:

<%= link_to "Edit Treatments", edit_practitioner_treatments(@practitioner) %>

Однако с точки зрения администратора мне все равно нужно иметь возможность управлять лечением, не видя объекта практикующего врача:

<%= link_to "Edit Treatments", edit_treatments(@treatment) %>

который также имеет барьеры аутентификации.

  • Есть ли более простое решение для извлечения методов лечения, которые я пропустил?
  • Возможно ли время от времени иметь вложенные маршруты?
  • Выпил ли я сегодня утром слишком много кофе и поэтому сейчас нахожусь в состоянии безумия?
Это было полезно?

Решение

Как правило, при рассмотрении функций администратора, которые часто предоставляют пользователю совершенно другой интерфейс с проверкой разрешений, основанной больше на «сломает ли это что-то», чем на «следует ли вам разрешить», выгодно создать область администрирования с отдельными контроллерами.Например:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top