Вы можете сделать это без дополнительного контроллера, относительно легко в 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)
.
Протестировано на Rails 2.3.5, другие версии могут отличаться. Дополнительные сведения о параметрах, доступных на маршрутах RESTful, см. В документации по ActionController :: Resources .
.