Вопрос

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

На данный момент у меня в настоящее время есть все настройки кода в обычной структуре MVC MVC. Таким образом, администратор пользователей является /пользователями, а видео - /видео.

Мои планы состоит в том, чтобы взять код для этого и переместить его в каталог A /Admin. Таким образом, два контроллера, выше, необходимо получить доступ к /admin /users и /Admin /Videos. Я не уверен, как ToDo Ruote (добавление /администратор в качестве префикса) и я уверен в том, как управлять логикой. Я думаю, что настройка дополнительного «среднего» контроллера, который каким -то образом вкладывается между ApplicationControler и целевым контроллером при обращении /Admin Directory. Таким образом, любые дополнительные флаги и перегруженные методы могут быть порождены только для раздела /администратора (я полагаю, что я тоже мог бы использовать фильтр).

Если бы это было сработать, то следующим вопросом будет разделение логики представлений (но это просто переименование папок и так далее).

Либо я делаю это таким образом, либо у меня есть два экземпляра рельса, которые разделяют код MVC между ними (и я думаю, что база данных тоже), но я боюсь, что это вызвало бы много ошибок дублирования.

Есть идеи относительно того, как мне это делать?

Большое спасибо!

Это было полезно?

Решение

Если вы не против иметь два контроллера для каждого ресурса, у вас может быть отдельное пространство имен «администратора». Мне это нравится, так как раздел администратора полностью отличается от публичной. Административные контроллеры реализуют все действия CRUD, тогда как публичные реализуют только действия и индекс.

routes.rb:

map.namespace :admin do |admin|
  admin.resources :users
  admin.resources :videos
end

map.resources :videos, :only => [:index, :show]

Ваши контроллеры могут быть чем -то вроде:

class VideosController < PublicController; end

class Admin::VideosController < Admin::AdminController; end

class PublicController < ApplicationController
  layout 'public'
  before_filter :load_public_menu
end

class Admin::AdminController < ApplicationController
  layout 'admin'
  before_filter :login_required, :load_admin_menu
end

Контроллеры и представления с именами имеют свой собственный подкаталог внутри приложения/контроллеров и каталогов приложений/представлений. Если вы используете form_for Помощник, вам нужно изменить его параметры:

form_for [:admin, @video] do |f|

Другие советы

Вы можете сделать это без дополнительного контроллера, относительно легко в config/routes.rb:

# non-admin routes
# your args could include :only => [:index,:show] for the non-admin routes
# if you wanted these to be read-only
map.resources :users,  ...your args..., :requirements => { :is_admin => false }
map.resources :videos, ...your args..., :requirements => { :is_admin => false }
# admin routes
map.resources :users,  ...your args..., :path_prefix => '/admin', \
    :name_prefix => 'admin_', :requirements => { :is_admin => true }
map.resources :videos, ...your args..., :path_prefix => '/admin', \
    :name_prefix => 'admin_', :requirements => { :is_admin => true }

какая :requirements на самом деле здесь делает, потому что я дал ему постоянную, а не регулярность, просто добавить params[:is_admin] При обращении к этому маршруту. Таким образом, вы можете проверить это значение в своем контроллере и отображать разные представления, или вы можете просто проверить его в представлении, если два представления похожи. Важно включить требование с false В версиях, не являющихся админами, иначе люди могут просто использовать /users/?is_admin=true.

А :name_prefix Редактирует названия маршрутов, так что у вас есть, например, admin_video_path(123) так же как video_path(123).

Протестировано на рельсах 2.3.5, другие версии могут отличаться. Для получения дополнительной информации о параметрах, доступных на спокойных маршрутах, см. ActionController :: Resources Docs.

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