2009-07-18 5 views
2

Was wäre der beste Ansatz, um ein "Extension" -System für eine Rails-Anwendung zu entwickeln?Erweiterung/Plugin/Modul-System für eine Ruby on Rails-Anwendung?

Ich meine die gleiche Art von System, das WordPress hat, wie die Registrierung von Funktionen auf Hooks usw. Dann Plugins konnte aktiviert/deaktiviert von einem Admin-Panel.

Gibt es Bücher/Online-Material über die Implementierung dieser Art von Funktionalität in RoR-Software?

Antwort

2

Es gibt einige Implementierungen, die von Ben Hughes erwähnt wurden, die gute Beispiele sind und gute Startpunkte geben würden. Wenn Sie von Grund auf Ihre eigene Lösung rollen wollte, würde ich so etwas wie die vorschlagen, folgende:

Erstellen Sie zwei Tabellen/Modelle, Widgets und UserWidgets:

Widgets: 
    ID (Primary Key) 
    Name 
    Description 

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

Jetzt haben Sie eine Tabelle, die ein Benutzer zum Zuordnen zum Widget. Ich gehe davon aus Ihren Widgets in erster Linie über JavaScript behandelt werden, so ein neues Unterverzeichnis hinzufügen, wie so ...

/public/javascripts/widgets 

nun für jedes Widget in Ihrer Widgets Tabelle, fügen Sie die entsprechende JS-Datei in dieses Verzeichnis. Wenn Sie ein Widget mit dem Namen "Clock" haben, fügen Sie "Clock.js" hinzu.

Fügen Sie dem Benutzermodell die richtigen Zuordnungen hinzu.

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

Dann in einer Ansicht irgendwo, können Sie tun:

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

Dies dürfte in das Layout für jede Art Seite (n) ein Widget auf dem würde erscheinen, setzen würde. Wenn Sie keine dynamischen Widgets über JavaScript verwenden möchten, können Sie überall in einer Ansicht/teilweise sehr ähnliche Ansichtscodes verwenden.

Verwandte Themen