Система расширений / плагинов / модулей для приложения Ruby on Rails? - PullRequest
2 голосов
/ 18 июля 2009

Каков наилучший подход к разработке системы «расширения» для приложения Rails?

Я имею в виду ту же систему, что и WordPress, например, регистрация функций для перехвата и т. Д. Затем плагины можно активировать / деактивировать из панели администратора.

Существуют ли какие-либо книги / онлайн-материалы о реализации такого рода функций в программном обеспечении RoR?

Ответы [ 3 ]

2 голосов
/ 31 июля 2009

Есть несколько реализаций, упомянутых Беном Хьюзом, которые являются хорошими примерами и могут послужить хорошей отправной точкой. Если вы хотите создать собственное решение с нуля, я бы предложил что-то вроде следующего:

Создание двух таблиц / моделей, виджетов и пользовательских виджетов:

Widgets:
  ID (Primary Key)
  Name
  Description

UserWidgets:
  ID (Primary Key)
  User_ID (Foreign Key -> Users.ID)
  Widget_ID (Foreign Key -> Widget.ID)

Теперь у вас есть таблица для привязки пользователя к виджету. Я предполагаю, что ваши виджеты будут обрабатываться в основном через JavaScript, поэтому добавьте новый подкаталог, например ...

/public/javascripts/widgets

Теперь для каждого виджета в вашей таблице виджетов добавьте соответствующий JS-файл в этот подкаталог. Если у вас есть виджет с именем «Часы», добавьте «Clock.js».

Добавьте соответствующие ассоциации в пользовательскую модель.

has_many :user_widgets, :dependent => :destroy
has_many :widgets, :through -> :user_widgets

Тогда где-то в представлении вы можете сделать:

<% @user.widgets.each do |w| %>
  <%= javascript_include_tag "widgets/#{w}" -%>
<% end %>

Скорее всего, это будет включено в макет любой страницы, на которой будет отображаться виджет. Если вы не хотите использовать динамические виджеты через JavaScript, вы можете использовать очень похожий код представления в любом месте представления / частичного.

0 голосов
/ 18 сентября 2009

Следующее предложение относится к Ruby-приложению, но его можно настроить для вашей цели: Плагины в вашем Ruby-приложении

0 голосов
/ 18 июля 2009

Typo делает это, используя обычные плагины рельсов

Папка, содержащая плагин src:

http://github.com/fdv/typo/tree/812c0fab156c09b7bf00040b047bb59bf586f806/vendor/plugins

Список плагинов:

http://wiki.github.com/fdv/typo/typo-plugins-list

Интерфейс администратора для выбора плагинов боковой панели:

http://github.com/fdv/typo/blob/812c0fab156c09b7bf00040b047bb59bf586f806/app/controllers/admin/sidebar_controller.rb

Я бы проверил эту реализацию для некоторых идей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...