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.