Я хочу создать плагин, которому понадобятся собственные таблицы. Поэтому наличие генераторов миграций и моделей — отличная идея, так как ручное копирование их из основного каталога приложения приводит к ошибкам и просто неудобно. Поэтому я начал создавать свои собственные генераторы. Начал с генератора миграций:
Теперь я мог бы перейти к созданию аналогичных генераторов для моделей и контроллеров. Но сейчас я начал читать эту статью Getting Started with Engines — Ruby on Rails Guides, и теперь мне кажется, что всё это может быть дублированием усилий. Почему генератор плагинов для Discourse так сильно отличается от генератора плагинов Rails?
Генератор плагинов Rails создаёт специфичный для плагина файл bin/rails, который позволяет использовать специфичные для плагина генераторы миграций и моделей. Было бы здорово иметь что-то подобное. Я тоже пытался сделать что-то похожее, но у меня не получилось, поэтому я пошёл другим путём и просто начал создавать эти уникальные генераторы. Если бы я лучше понимал различия между подходами Rails и Discourse к созданию плагинов, возможно, смог бы выбрать другой путь, что сэкономило бы время. Может быть, кто-то сможет подробнее объяснить. Почему плагины для Discourse и Rails — это разные вещи, и почему они не строятся друг на друге?
Плагины Rails отличаются от плагинов Discourse по многим причинам. Плагины Discourse должны иметь специфическую структуру папок, они могут расширять или переопределять код Ember ядра Discourse и так далее. Я думаю, что часть Rails плагина Discourse будет ближе к обычному плагину Rails, но это не одно и то же.
Кроме того, новые таблицы следует создавать только в случае крайней необходимости. В Discourse уже существует около 150 таблиц, и довольно редко бывает так, что ваша задача не решается с помощью одной или нескольких из них.
Однако в будущем я лично хотел бы и надеюсь, что это произойдет. Это означало бы, что люди создают огромные и более захватывающие плагины, проявляя больше креативности в том, что можно сделать с помощью Discourse.
Мне они нужны. Даже базовая функциональность требует таблиц. Меня очень раздражает отсутствие чётко документированного способа их создания. Например, плагин опросов использует собственные таблицы, но я не могу найти генератор для их создания. discourse/plugins/poll at main · discourse/discourse · GitHub
Ещё одно преимущество документации — это появление конвенций для пространств имён таблиц и миграций. (Я видел здесь на форумах действительно хаки-решения, рекомендуемые для добавления миграций в плагин)
Отлично! Так какой путь выбрать? Двигаться ближе к генератору плагинов Rails с собственным bin/rails в папке плагина или создавать собственные версии для всех генераторов (миграции, модели, контроллеры)?
Вам нужно ознакомиться с тематическими руководствами по разработке плагинов здесь. Для большинства плагинов можно использовать существующие таблицы (например, пользовательские поля записей). Бывают случаи, когда требуются дополнительные таблицы, но, вероятно, лучше начать с чего-то менее сложного.
Я прочитал руководство для начинающих по созданию плагинов и это. Есть ли что-то ещё? Я также изучил код некоторых плагинов. Я знаю лишь, что нужны таблицы. Есть и другие плагины, которые используют собственные таблицы. Почему существует такая одержимость отказом от создания новых таблиц? Есть ли большие затраты на создание новых таблиц? Особенно если они имеют префикс с именем плагина в начале, я действительно не вижу недостатков.
Вот эти материалы. Настоятельно рекомендую ознакомиться с ними на практике, прежде чем высказывать какие-либо замечания по вопросам разработки. Это не значит, что вам никогда не понадобятся пользовательские таблицы, но эти материалы обязательны к изучению в любом случае.
Это просто хранилище «ключ-значение». Там нельзя хранить связи между таблицами. Мне нравится SQL, и мне нужно использовать его для плагина, который я хочу создать.
Понимаю, что эта проблема касается тех, кто хочет создавать плагины, которые могут устанавливать и удалять «нетехнические пользователи». Я не из таких людей. Поэтому буду рад, если мы вернёмся к теме.
Если цель — создать что-то, что будете использовать только вы сами, на мой взгляд, было бы лучше написать расширение для браузера или десктопное приложение, а не плагин. Есть ли причина, по которой это обязательно должен быть плагин?