Administrate Gem еще не поддерживает модели с пространством имен

Я работаю над модульным Rails-приложением, пройдя обучение по TutsPlus Modular Rails App здесь.

Однако после установки администрирования Gem и запуска rails generate administrate:install чтобы установить панель управления, я получаю сообщение об ошибке, как на изображении ниже:

Вкратце, Administrated Gem не работает с приложением Modular Rails. Как мне решить эту проблему или как сделать так, чтобы администрирование Gem поддерживало модели с пространством имен???

Что я сделал:

Я пытался жестко запрограммировать приборную панель, но не буду просто работать с администрированием (Rails просто не может нормально администрировать Gem в модульном приложении Rails из-за этой ошибки, но работает с приложением Monolithic Rails).

4 ответа

после слияния этого PR Now Administrate поддерживает ресурсы пространства имен. Пример решения для моделей с пространством имен приведен ниже. Предположим, у вас есть модель записи в пространстве имен блога.

Модель

      app/models/blog/post.rb

Теперь вы хотите добавить его в панель администратора.
просто следуйте этой структуре, чтобы заставить ее работать.

config/routes.rb

      namespace :admin do
    namespace :blog do
      resources :posts
    end
    root to: "admin_users#index"
end

#app/admin/блог/posts_controller.rb

      module Admin
  class Blog::PostsController < Admin::ApplicationController
  end
end

#app/dashboards/блог/posts_dashboard.rb

      require "administrate/base_dashboard"

class Blog::PostDashboard < Administrate::BaseDashboard
  #normal stuff
end

Подробное решение см. в этом обсуждении .

Если вы пытаетесь выяснить, как добавить модель однотабличного наследования (STI) на панель администрирования, вот как мне удалось это сделать, используя версию0.18.0драгоценного камня «Администрирование»:

  1. Используйте генератор драгоценного камня, чтобы создать новый объект контроллера и панели мониторинга для базового класса вашей модели:
       rails generate administrate:dashboard Foo::Base
  1. Добавьте определение маршрута в пространстве имен в свой файл:
      Rails.application.routes.draw do
  ...
    namespace :admin do
      ...
      namespace :foo do
        resources :bases
      end
      ...
    end
  1. Переместите вновь созданный контроллер в подпапку с именем пространства имен вашей модели. Например,controllers > admin > bases_controller.rbстановитсяcontrollers > admin > foo > bases_controller.rb
  2. Обновите контроллер, переопределивfind_resource(param)метод. Обратите внимание на использованиеbecomesЭто необходимо, потому что без него гем Администрирование будет пытаться генерировать пути на основе конкретного класса экземпляров модели (например,Foo::Bar), но выше вroutes.rbмы добавили только маршруты дляFoo::Baseсорт.
      module Admin
  class Foo::BasesController < Admin::ApplicationController

    ...

    def find_resource(param)
      resource_class.find_by!(id: param)
        .becomes(resource_class) # this ensures that the resource is presented as an Foo::Base,
                                  # not as an Foo::Bar, Foo::Baz, etc.
    end
  1. Наконец, вам нужно будет добавить собственный инфлектор для обработки множественного числа слова. Без этого Rails почему-то ставит множественное числоBaseкBasisвместоBases(последнее из которых ожидает Администрация). Без этого вы увидите сообщения об ошибках, например:
      NameError (uninitialized constant Foo::BasisDashboard):

Вот и все!

Мне нужно сделать PR, чтобы обновить поведение генератора, чтобы оно делало это автоматически для моделей STI, но тем временем эти обходные пути привели к добавлению моей модели в пространстве имен на панель мониторинга.

Прочитайте и внимательно следуйте инструкции, затем обновите меня

Что такое администрирование?

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

Администрирование решает ту же проблему, что и Rails Admin и ActiveAdmin, но призвано обеспечить удобство работы для администраторов сайтов и упростить настройку для разработчиков.

Для достижения этих целей администрация следует нескольким руководящим принципам:

  • Нет DSL (доменные языки)
  • Поддерживайте простейшие сценарии использования и позволяйте пользователю переопределять значения по умолчанию стандартными инструментами, такими как простые контроллеры Rails и представления.
  • Разбейте библиотеку на основные компоненты и плагины, чтобы каждый компонент оставался небольшим и простым в обслуживании.

Начиная

Администрация поддерживает Rails от 4.2, до 5.0 и выше.

Добавьте Администрацию в свой Gemfile и повторно объедините:

gem "administrate"

Тогда бегиbundle install в вашем терминале!!!

Включенный установщик создаст информационные панели для каждой модели в вашем приложении с маршрутами:

$ rails generate administrate:install

Перезагрузите сервер и зайдите на http://localhost:3000/admin, чтобы увидеть новую панель инструментов в действии.

Для получения более подробных инструкций или работы с приложениями, поддерживающими только Rails API, ознакомьтесь с руководством "Приступая к работе".

Поддерживает пространство имен:

rails generate administrate:install --namespace=super_admin

Чтобы создать Dashboard с пространством имен:

rails generate administrate:dashboard Model --namespace=super_admin
Другие вопросы по тегам