Создание каталога Admin в направляющих

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

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

Мои планы состоят в том, чтобы взять код для этого и переместить его в / администраторский каталог. Таким образом, к этим двум контроллерам выше должны были бы получить доступ/admin/users и/admin/videos. Я не уверен, как todo ruote (добавляющий / администратора как префикс), и при этом я не уверен в том, как управлять логикой. То, что я думаю о выполнении, настраивает дополнительный 'средний' контроллер, который так или иначе вкладывается между ApplicationControler и предназначенным контроллером, когда к / администраторскому каталогу получают доступ. Таким образом, любые дополнительные флаги и перегруженные методы могут быть порождены для / администраторского раздела только (я полагаю, что мог использовать фильтр также для этого).

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

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

Какие-либо идеи относительно того, как я должен пойти о выполнении этого?

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

7
задан matsko 3 June 2010 в 06:45
поделиться

2 ответа

Если вы не против иметь два контроллера для каждого ресурса, вы можете иметь отдельное пространство имен "admin". Мне нравится так, поскольку раздел администратора полностью отличается от публичного. Контроллеры admin реализуют все CRUD действия, в то время как публичные реализуют только действия show и index.

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

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

form_for [:admin, @video] do |f|
6
ответ дан 7 December 2019 в 07:40
поделиться

Вы можете сделать это без дополнительного контроллера, относительно легко в 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 фактически делает здесь, потому что я дал ему константу, а не regex, это просто добавить params[:is_admin] при доступе через этот маршрут. Таким образом, вы можете проверить это значение в вашем контроллере и отобразить различные представления, или вы можете просто проверить его в представлении, если два представления похожи. Важно включить требование с false для неадминских версий, иначе люди могут просто использовать /users/?is_admin=true.

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

Проверено на Rails 2.3.5, другие версии могут отличаться. Подробнее о параметрах, доступных в маршрутах RESTful, см. в ActionController::Resources docs.

1
ответ дан 7 December 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: