Лучшая практика Rails для настройки бэкэнда - PullRequest
7 голосов
/ 16 сентября 2011

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

Бэкэнд должен позволять нормальное редактирование типа CRUD объектов нашей модели.Виды и расположение также полностью отличаются от внешнего интерфейса.Какова лучшая практика для реализации этого в Rails 3?

Два наших подхода:

  1. В папке представления администратора хранится весь вид определенного кода, а также папка администратора вВ папке controllers находятся все контроллеры, которые управляют специальным доступом администратора.
  2. Система условной логики с одним набором представлений и контроллеров, с операторами if, проверяющими, находится ли пользователь в режиме администратора или нет.

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

1 Ответ

15 голосов
/ 16 сентября 2011

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

Ваша структура каталогов должна выглядеть следующим образом:

controllers/
     |--admin/
        |--posts_controller.rb

В ваших маршрутах вы помещаете все необходимое в пространство имен администратора:

namespace :admin do
  resources :posts, :comments
end

У ваших контроллеров должна быть папка admin, а контроллер в административной области будет выглядеть так:

class Admin::PostsController < ApplicationController
end

У вас также должна быть папка admin в ваших представлениях, где выпоместите соответствующие виды:

views/
   |--admin/
        |--posts/
             |--index.html.erb
             |--...

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

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

...