Нет реального «пути Rails» для админ-интерфейсов, на самом деле - вы можете найти все возможные решения в ряде приложений. DHH подразумевает, что он предпочитает пространства имен (с базовой аутентификацией HTTP), но это остается простым следствием, а не одним из официальных мнений Rails.
Сказанное, я нашел хороший успех с этим подходом в последнее время (namespacing + HTTP Basic). Это выглядит следующим образом:
routes.rb:
map.namespace :admin do |admin|
admin.resources :users
admin.resources :posts
end
админ/users_controller.rb:
class Admin::UsersController < ApplicationController
before_filter :admin_required
# ...
end
application.rb
class ApplicationController < ActionController::Base
# ...
protected
def admin_required
authenticate_or_request_with_http_basic do |user_name, password|
user_name == 'admin' && password == 's3cr3t'
end if RAILS_ENV == 'production' || params[:admin_http]
end
end
Условный на authenticate_or_request_with_http_basic
запускает HTTP Базовый auth в режиме производства или при добавлении ?admin_http=true
к любому URL-адресу, поэтому вы c проверить его в своих функциональных тестах и вручную обновить URL-адрес при просмотре сайта разработки.
Ненавижу это. Маршруты получают неудобные имена: «new_admin_user_path». Это операция для администратора для создания нового пользователя, а не для создания нового пользователя-администратора. Его следует называть «admin_new_user_path». Некрасиво. Это заставляет меня подозревать, что я использую пространства имен для неправильного. – hoff2 2013-04-20 19:55:18