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
драгоценного камня «Администрирование»:
- Используйте генератор драгоценного камня, чтобы создать новый объект контроллера и панели мониторинга для базового класса вашей модели:
rails generate administrate:dashboard Foo::Base
- Добавьте определение маршрута в пространстве имен в свой файл:
Rails.application.routes.draw do
...
namespace :admin do
...
namespace :foo do
resources :bases
end
...
end
- Переместите вновь созданный контроллер в подпапку с именем пространства имен вашей модели. Например,
controllers > admin > bases_controller.rb
становитсяcontrollers > admin > foo > bases_controller.rb
- Обновите контроллер, переопределив
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
- Наконец, вам нужно будет добавить собственный инфлектор для обработки множественного числа слова. Без этого 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