Простые административные интерфейсы с активным администратором в Rails
Февраль 4, 2019
Администрирование приложений является распространенным требованием в большинстве веб-приложений, и его создание с нуля может быть сложной задачей. Однако есть некоторые опции, которые могут спасти вас от начала с нуля при создании интерфейса администратора. Мы рассмотрим один из популярных вариантов — Active Admin .
Active Admin — это структура для построения интерфейсов в стиле администрирования. Без особых усилий вы можете создать интерфейс администратора, который позволит вам управлять вашими данными, и он легко настраивается. Мы рассмотрим, как настроить и настроить его в приложении на Rails 4.
Следует отметить, что на момент написания этого руководства еще не было официального выпуска, поддерживающего Rails 4 (версия 1.0.0, которая находится в разработке, будет поддерживать Rails 4). Сейчас вам придется использовать основную ветку. Кроме того, сопровождающие репозитория Active Admin Github предупреждают, что документация на официальном веб-сайте устарела, и для получения последних документов вам следует проверить саму страницу репозитория Github .
Установка и настройка
Для этого урока я создал три модели.
rails g model Genre name:string rails g model Author first_name:string last_name:string rails g model Book name:string price:decimal author:references genre:references rake db:migrate
Чтобы настроить Active Admin, добавьте драгоценный камень в свой Gemfile. Для поддержки Rails 4 на данный момент мы отслеживаем master.
gem 'activeadmin', github:'gregbell/active_admin'
Затем установите его.
bundle install
Запустите генератор для установки Active Admin. Это создаст модель AdminUser , файл инициализатора для настройки Active Admin и каталог app/admin котором будут храниться файлы администрирования. Он использует Devise для аутентификации.
rails g active_admin:install
Если вы уже настроили модель AdminUser , вы можете вместо этого запустить следующую, которая будет использовать существующую модель AdminUser .
rails g active_admin:install AdminUser
Вы получите дальнейшие инструкции по настройке терминала для некоторых настроек, которые необходимо выполнить вручную.
После входа в систему отображается панель администратора. Вверху находится меню, показывающее модели, которые были зарегистрированы в Active Admin. На данный момент, только модель AdminUser была зарегистрирована. Вы можете просматривать список зарегистрированных администраторов, редактировать их информацию и создавать новых.
Создание пользователей-администраторов
Прежде чем регистрировать другие модели в Active Admin, давайте изменим поведение по умолчанию для создания пользователей-администраторов. По умолчанию для создания пользователя с правами администратора необходимо ввести адрес электронной почты, пароль и пароль для подтверждения. Было бы лучше, если бы приложение только запрашивало адрес электронной почты, а затем отправляло ссылку пользователю, чтобы он мог установить свой пароль.
Измените форму, используемую для создания пользователей с app/admin/admin_user.rb администратора в app/admin/admin_user.rb чтобы она содержала только поле электронной почты.
form do|f| f.inputs "Admin Details"do f.input :emailend f.actions end
Теперь разрешите создание администратора без пароля, добавив следующее в файл app/models/admin_user.rb .
Требуется password_required? Метод проверяет, создается ли запись в первый раз, и возвращает false, если это так, что позволяет создать администратора без пароля. Метод after_create отправляет письмо на зарегистрированный адрес электронной почты со ссылкой для установки пароля. Это уже было установлено Devise, так как по умолчанию Devise был установлен с rememberable субмодулем. (Это то же самое электронное письмо, которое отправляется, когда администратор пытается восстановить свой пароль по ссылке «Забыли пароль». Вы можете изменить шаблон сообщения по умолчанию, чтобы он соответствовал как изменению пароля, так и настройке пароля).
Если вы не определили параметры URL по умолчанию в своих файлах среды, отправка электронной почты не удастся. Поскольку мы находимся в разработке, включите в файл config/environments/development.rb .
Конечно, вам нужно настроить почтовую программу для отправки электронного письма. Это выходит за рамки данного руководства, но вы можете проверить документацию Action Mailer, чтобы узнать, как отправлять электронные письма в приложении Rails. Даже не настроив Action Mailer для доставки электронной почты, мы можем просматривать содержимое электронной почты на терминале. Вы можете найти URL ссылки смены пароля в сообщении электронной почты, скопировать и вставить его в браузер, чтобы проверить, работает ли он.
Я заполнил базу данных некоторыми данными, поместив следующее в файл db/seeds.rb и запустил rake db:seed
ya =Genre.create!:name=>"Young Adult" humor =Genre.create!:name=>"Humor" gnovel =Genre.create!:name=>"Graphic Novel" crime =Genre.create!:name=>"Crime" fantasy =Genre.create!:name=>"Fantasy" business =Genre.create!:name=>"Business and Finance" collins =Author.create!:first_name=>"Suzanne",:last_name=>"Collins" kaling =Author.create!:first_name=>"Mindy",:last_name=>"Kaling" handler =Author.create!:first_name=>"Chelsea",:last_name=>"Handler" ohba =Author.create!:first_name=>"Tsugumi",:last_name=>"Ohba" oda =Author.create!:first_name=>"Eiichiro",:last_name=>"Oda" grisham =Author.create!:first_name=>"John",:last_name=>"Grisham" patterson =Author.create!:first_name=>"James",:last_name=>"Patterson" martin =Author.create!:first_name=>"George",:last_name=>"Martin" tolkien =Author.create!:first_name=>"John",:last_name=>"Tolkien" ende =Author.create!:first_name=>"Michael",:last_name=>"Ende" ries =Author.create!:first_name=>"Eric",:last_name=>"Ries" eyal =Author.create!:first_name=>"Nir",:last_name=>"Eyal"Book.create!:name=>"The Hunger Games",:price=>20.00,:author=> collins,:genre=> ya Book.create!:name=>"Catching Fire",:price=>20.00,:author=> collins,:genre=> ya Book.create!:name=>"Mockingjay",:price=>20.00,:author=> collins,:genre=> ya Book.create!:name=>"Is Everyone Hanging out Without Me?",:price=>20.00,:author=> kaling,:genre=> humor Book.create!:name=>"Are You There, Vodka? It's Me Chelsea",:price=>20.00,:author=> handler,:genre=> humor Book.create!:name=>"Death Note",:price=>20.00,:author=> ohba,:genre=> gnovel Book.create!:name=>"One Piece",:price=>20.00,:author=> oda,:genre=> gnovel Book.create!:name=>"The Pelican Brief",:price=>20.00,:author=> grisham,:genre=> crime Book.create!:name=>"A Time to Kill",:price=>20.00,:author=> grisham,:genre=> crime Book.create!:name=>"Along Came a Spider",:price=>20.00,:author=> patterson,:genre=> crime Book.create!:name=>"A Game of Thrones",:price=>20.00,:author=> martin,:genre=> fantasy Book.create!:name=>"A Clash of Kings",:price=>20.00,:author=> martin,:genre=> fantasy Book.create!:name=>"A Storm of Swords",:price=>20.00,:author=> martin,:genre=> fantasy Book.create!:name=>"A Feast for Crows",:price=>20.00,:author=> martin,:genre=> fantasy Book.create!:name=>"A Dance with Dragons",:price=>20.00,:author=> martin,:genre=> fantasy Book.create!:name=>"The Silmarillion",:price=>20.00,:author=> tolkien,:genre=> fantasy Book.create!:name=>"The NeverEnding Story",:price=>20.00,:author=> ende,:genre=> fantasy Book.create!:name=>"The Lean Startup",:price=>20.00,:author=> ries,:genre=> business Book.create!:name=>"Hooked",:price=>20.00,:author=> eyal,:genre=> business
Запустив приложение, вы теперь можете видеть пункты « Authors , « Books и « Genres в меню «Панель инструментов». При нажатии на каждый элемент меню вы увидите список элементов в этой коллекции со ссылками « View , « Edit и « Delete для каждого.
Давайте изменим страницу Books со значения по умолчанию, показанного ниже.
Сначала измените отображаемые столбцы. Active Admin отображает столбцы для всех полей, которые есть у вашего объекта, но в этом случае мы удалим столбцы Created At и Updated At и добавим столбцы с именем автора и именем жанра. Это делается в методе index в app/admin/book.rb , где указаны включенные столбцы.
index do column :name column :author column :genre column :priceend
Активный администратор обнаружит отношение belongs_to которое Book имеет с Author и Genre , но вы заметите, что для столбца Author имя записи отображается как Author #1 (в зависимости от идентификатора записи). Глядя на раскрывающееся меню «Автор», которое находится на боковой панели «Фильтры» справа, обратите внимание, что имя объекта «Автор» — это то, что отображается, а не то, что легко читается человеком.
Это связано с тем, что Active Admin решает, какое имя использовать в качестве отображаемого имени для объекта.
# Active Admin makes educated guesses when displaying objects, this is # the list of methods it tries calling in order setting :display_name_methods, [ :display_name, :full_name, :name, :username, :login, :title, :email, :to_s ]
Чтобы исправить это, определите метод to_s для модели Author в файле app/models/author.rb .
При обновлении страницы в столбце Автор теперь будут отображаться имя и фамилия автора.
Вы также можете сделать некоторые манипуляции с данными до их отображения. Давайте изменим столбец «Цена» для отображения его валюты. Для этого мы будем использовать помощникnumber_to_currency . Для долларов не нужно передавать опции в метод.
ActiveAdmin.register Bookdo index do column :name column :author column :genre column :pricedo|product| number_to_currency product.price end default_actions endend
Метод default_actions добавляет ссылки «View», «Edit» и «Destroy».
Вы можете изменить имя столбца, указав новое имя перед именем поля в методе index.
column 'New Name',:name
На правой стороне страницы находится фильтр, который полезен при поиске записей. Возможно, вам не потребуются некоторые атрибуты по умолчанию, которые он предлагает. Для опции Book давайте определим атрибуты, которые мы хотим использовать для фильтрации. В app/admin/book.rb добавить
Active Admin выбирает наиболее подходящий тип фильтра на основе типа атрибута. Для атрибутов автора и жанра они отображаются в выпадающих меню выбора. Возможно, мы захотим отфильтровать записи, относящиеся к нескольким жанрам или авторам, поэтому меню выбора для этого не пригодится. Давайте изменим это, чтобы отображать элементы коллекции как флажки.
Боковая панель может быть изменена, чтобы показать больше информации. Например, добавьте боковую панель на страницу « Author », где перечислены все книги, которые автор написал в таблице. В файле app/admin/author.rb внесите следующие изменения.
ActiveAdmin.register Authordo sidebar 'Books by this Author',:only=>:showdo table_for Book.joins(:author).where(:author_id=> author.id)do|t| t.column("Title"){|book| book.name }endendend
Импорт данных
По умолчанию интерфейс позволяет нам создавать записи одну за другой. Это может быть неэффективно, если у нас много данных, которые нам нужно сохранить, или мы хотим использовать данные из другого приложения. В приложении можно включить импорт CSV.
Для этого мы будем использовать гем active_admin_importable . В вашем Gemfile добавьте:
gem 'active_admin_importable'
А затем выполните bundle install .
Чтобы включить импорт CSV на странице автора, в app/admin/author.rb добавьте следующее.
active_admin_importable
Кнопка « Import Authors появится в правом верхнем углу страницы. Нажмите на нее и найдите в локальной файловой системе файл csv, который вы хотите импортировать. Файл должен иметь строку заголовка, соответствующую атрибутам вашей модели. Вам не нужно включать все столбцы, так как значения по умолчанию будут вставлены для столбцов, которые вы пропустите.
Я создал CSV-файл со следующими двумя записями и импортировал его.
First name,Last name Jane,DoeJohn,Doe
Загрузка данных
Active Admin позволяет загружать данные в форматах CSV, XML или JSON.
Когда вы загрузите файл CSV, вы увидите атрибуты модели в качестве заголовков файла. Вы можете указать, что включено в файл CSV. Для модели «Автор» отформатируйте наш CSV-файл, включив в него только имя и фамилию автора.
В app/admin/author.rb следующее.
csv do column :first_name column :last_nameend
Вы также можете включить экспорт электронных таблиц . Добавьте следующее в Gemfile.
gem 'activeadmin-axlsx'
Запустите bundle install . При запуске приложения вы увидите ссылку XLSX, включенную на каждой странице ресурса, в качестве одного из вариантов загрузки данных.
Можно отформатировать данные, экспортированные в электронную таблицу. Ниже указаны имя и фамилия автора, а также изменен цвет заголовка. В app/admin/author.rb доп.
Если вы не хотите предлагать XML в качестве варианта загрузки, вы можете изменить параметры для конкретной модели, добавив следующее в файл Active Admin модели. Например, в app/admin/author.rb добавьте app/admin/author.rb инструкцию, которая изменит только ссылки на странице автора.
index download_links:[:csv,:xlsx]
Чтобы установить параметры для всех ресурсов в вашем пространстве имен, добавьте следующее в файл config/initializers/active_admin.rb .
Мы рассмотрели некоторые общие настройки, но у Active Admin есть еще масса функций, которые мы не рассмотрели. Чтобы узнать больше, начните с документации и страницы Github .