Фундаментальный MVC - Редактирование содержимого модели с другого контроллера - PullRequest
0 голосов
/ 25 августа 2011

Я пытаюсь понять некоторые базовые принципы, когда речь заходит о Rails и шаблоне проектирования MVC.

Допустим, я создаю CMS.У меня есть следующее:

/Pages
controller
model
view

Когда запрос поступает, он должен проверить результаты на основе URL в контроллере Pages и представить страницу.

Теперь давайтескажем, у меня есть бэкэнд для этого, проще говоря, раздел администратора:

Admin
controller - index, edit actions
view

Теперь раздел администратора аутентифицируется с помощью модели Users, поэтому он не должен иметь свою собственную модель (по крайней мере, яне вижу необходимости в настоящее время).Пользователи должны иметь возможность редактировать контент в / из модели Pages.Это то, что должно быть четко указано?Это то, что я рендеринг на уровне контроллера, или это должно быть сделано с помощью вызова AJAX к контроллеру?Мне трудно понять, как именно работает этот процесс.

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

Редактировать: Или я слишком усложняю, потому что они используют один и тот же (расширенный) класс?

1 Ответ

0 голосов
/ 26 августа 2011

Я использую Devise для аутентификации пользователя. В вики Devise на github есть страница о том, как добавить простую роль администратора в свой профиль пользователя. Или вы можете использовать CanCan для полной модели авторизации. В любом случае для проверки роли пользователя предусмотрены вспомогательные методы.

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

Вы можете использовать пространство имен «admin» в своих маршрутах (см. Руководства Rails по маршрутизации), а затем поместить все эти действия администратора в один контроллер, оставить индекс и показать в базовом контроллере, а затем использовать before_filter в вашем администраторе. контроллер, чтобы сохранить код немного чище.

Шаблоны представлений также можно использовать и is_admin? (или аналогичный) вспомогательный метод для предоставления определенных функций / ссылок и т. д.

...