Как использовать несколько экземпляров Active Admin для полных отдельных моделей

У меня есть 2 модели:

  • Пользователи
  • Поставщики

и я хочу предоставить два изолированных интерфейса Active Admin. Оба они разрабатывают маршруты:

devise_for :users, ActiveAdmin::Devise.config
devise_for :suppliers,   ActiveAdmin::Devise.config (can I somehow say ActiveAdmin2::Devise.config)

Пользователь будет иметь доступ к Продуктам, Заказы и Поставщик будут иметь доступ только к продуктам.

В идеале, я хочу иметь разные папки в приложении и представлять разные данные.

пользователь /order.rb

ActiveAdmin.register Order do
  filter :email
  filter :created_at  , :label => "Order Creation Date"
  filter :order_created

поставщик /order.rb

ActiveAdmin.register Order do
  filter :email

Есть ли способ инициализировать 2 класса ActiveAdmin и запускать их параллельно?

Любой другой лучший способ заставить его работать под тем же веб-сайтом/приложением?

Ответ 1

Для этого можно использовать пространства имен.

ActiveAdmin.register Order, namespace: :supplier do
  # will be available at /supplier/orders
end

ActiveAdmin.register Order, namespace: :user do
  # available at /user/orders
end

Вы можете настроить аутентификацию для каждого пространства имен в config/initializers/active_admin.rb

Например:

  config.default_namespace = :user

  config.namespace :supplier do |supplier|
    supplier.authentication_method = :authenticate_supplier_user!
    supplier.current_user_method = :current_supplier_user
    supplier.logout_link_path = :destroy_supplier_user_session_path
    supplier.root_to = 'orders#index'
  end

  config.namespace :user do |user|
    user.authentication_method = false
    user.current_user_method = :current_user
    user.logout_link_path = false

Дополнительная информация: http://activeadmin.info/docs/1-general-configuration.html#namespaces