- PVSM.RU - https://www.pvsm.ru -
Всем доброго дня! Я вам хочу поведать о замечательном геме (плагине) для 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 отслеживает связи между моделями (сущностями) и умеет подгружать связанные записи. Вот так:
При этом плагин хорошо конфигурируется:
module GroupsHelper
def group_color_column(record)
raw "<div style="background: #" + record.color + ";" class="group_color"></div>"
end
end
Исходный код [6] проекта доступен на github'е, там же, в вики, лежит отличная документация [7] (хотя немного разрозненная и местами устаревшая). Если всё-равно что-то непонятно или что-то не работает — у проекта есть живая гуглогруппа [8], посмотрите или поспрашивайте там, вам помогут (но вы ведь точно перед этим посмотрите FAQ [9] в документации, правда?)
Плагин прекрасно подходит для прототипирования и создания простых интерфейсов, в случае если данных много и они однотипные (например много-много цифр). Так же хорош для различных админок и т.п.
Однако, если вам нужно что-то достаточно сложное — лучше пишите своё. Active Scaffold сложно настроить для обработки сложных форм, сложных представлений, работы с отношением многие-ко-многим, работы с хитро друг с другом связанными сущностями. Здесь лучше сразу написать своё.
На этом всё. Счастливой вам разработки и не тратьтесь на рутину понапрасну. Для неё и созданы такие потрясающие плагины. И не забывайте возвращать в open source. (Собственно, таким небольшим возвратом я сейчас здесь и занимался)
Автор: Envek
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/interfejsy/10751
Ссылки в тексте:
[1] создавать ссылки: https://github.com/activescaffold/active_scaffold/wiki/API%3A-Action-Link
[2] Примерно таким макаром: https://github.com/activescaffold/active_scaffold/wiki/API%3A-mark
[3] переопределять как отображаются значения различных колонок: https://github.com/activescaffold/active_scaffold/wiki/Field-Overrides
[4] переопределять элементы формы: https://github.com/activescaffold/active_scaffold/wiki/Form-Overrides
[5] API:Column: https://github.com/activescaffold/active_scaffold/wiki/API%3A-Column
[6] Исходный код: https://github.com/activescaffold/active_scaffold
[7] документация: https://github.com/activescaffold/active_scaffold/wiki
[8] гуглогруппа: http://groups.google.com/group/activescaffold
[9] FAQ: https://github.com/activescaffold/active_scaffold/wiki/FAQ
Нажмите здесь для печати.