Как стать автором
Обновить

Знакомство с Active Scaffold

Время на прочтение3 мин
Количество просмотров5.7K
Всем доброго дня! Я вам хочу поведать о замечательном геме (плагине) для Ruby and Rails (практически не нашёл упоминаний о нём на хабре).

Цель данного плагина — предоставить удобный типовой интерфейс «из коробки». С добавлением, удалением, правкой, поиском, сортировкой и всё это с ajax (или без него).



Делается такое чудо, как на рисунке, в несколько простых шагов:

1. Кидаем строчку в Gemfile
gem 'active_scaffold'

2. Устанавливаем gem'ы
bundle install

3. Подключаем стили и скрипты
/* В /app/assets/stylesheets/application.css.scss
 *= require active_scaffold
 */

// В /app/assets/javascripts/application.js
//= require active_scaffold

4. Прописываем в целевом контроллере
class StuffsController < AuditorController
  active_scaffold :stuff
end

Всё! Дальше Active Scaffold сам подхватит соответствующую модель (в примере — Stuff), разузнает о её колонках в таблице БД и связанных моделях, выберет 15 (по умолчанию) первых записей согласно настройкам default_scope в модели (если задано) и представит вам. Так же заодно (кроме отображения HTML) предоставит вам API в форматах JSON и XML.

Active Scaffold определяет генераторы active_scaffold и active_scaffold_controller, позволяющие, создавать модель+миграцию+контроллер+маршрут либо только один контроллер, соответственно. Примерно так:
rails generate active_scaffold stub name:string value:integer precise:decimal occurs:date


В результате получится вот это:


ActiveScaffold дружит с I18n, так что русификация не должна вызвать затруднений:
ru:
  activerecord:
    models:
      stub:
        one: "Заглушка"
        few: "Заглушки"
        many: "Заглушки"
        other: "Заглушки"
    attributes:
      stub:
        name: "Название"
        value: "Значение"
        precise: "Точно"
        occurs: "Состоится"
        created_at: "Создано"
        updated_at: "Изменено"



Очень здорово, правда?

Также Active Scaffold умеет выводит сообщения об ошибках, если валидация модели провалилась или случилось что-то непоправимое с сервером.

Но это всё база. Самое главное: Active Scaffold отслеживает связи между моделями (сущностями) и умеет подгружать связанные записи. Вот так:


При этом плагин хорошо конфигурируется:
  • Можно задавать порядок и количество выводимых колонок (кроме колонок можно выводить методы модели), для создания, отображения и редактирования могут задаваться свои наборы атрибутов
  • Можно управлять сортировкой и фильтрацией
  • В зависимости от разных условий можно щедро раздавать CSS-классы различным записям
  • Можно создавать ссылки на свои действия в контроллере.
  • Можно включить чекбоксы и отмечать множество записей скопом (и скопом их обрабатывать) Примерно таким макаром.
  • Можно переопределять как отображаются значения различных колонок (обратите внимание на цветные квадратики):

    Такой трюк делается так (в файле хелпера для нужного контроллера):
    module GroupsHelper
      def group_color_column(record)
        raw "<div style=\"background: #" + record.color + ";\" class=\"group_color\"></div>"
      end
    end
  • Можно переопределять элементы формы. Для большинства случаев (пароль, список, …) есть уже готовые, смотреть в API:Column под заголовком form_ui.
  • Можно задавать настройки и права доступа к каждой записи отдельно.
  • И многое, многое другое…

Исходный код проекта доступен на github'е, там же, в вики, лежит отличная документация (хотя немного разрозненная и местами устаревшая). Если всё-равно что-то непонятно или что-то не работает — у проекта есть живая гуглогруппа, посмотрите или поспрашивайте там, вам помогут (но вы ведь точно перед этим посмотрите FAQ в документации, правда?)

Резюмируя


Плагин прекрасно подходит для прототипирования и создания простых интерфейсов, в случае если данных много и они однотипные (например много-много цифр). Так же хорош для различных админок и т.п.

Однако, если вам нужно что-то достаточно сложное — лучше пишите своё. Active Scaffold сложно настроить для обработки сложных форм, сложных представлений, работы с отношением многие-ко-многим, работы с хитро друг с другом связанными сущностями. Здесь лучше сразу написать своё.

На этом всё. Счастливой вам разработки и не тратьтесь на рутину понапрасну. Для неё и созданы такие потрясающие плагины. И не забывайте возвращать в open source. (Собственно, таким небольшим возвратом я сейчас здесь и занимался)
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 16: ↑13 и ↓3+10
Комментарии13

Публикации

Истории

Ближайшие события

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань