Alternativen zur Verwendung von Polymorphismus in Ruby on Rails

8

Ich schreibe gerade eine Intranet-Webapplikation, wo Leute Admin-Anfragen zum Hinzufügen von verschiedenen Ressourcen hinzufügen können. Die Beispielanforderungen wären:

  • Programme installieren, in diesem Fall wählt der Benutzer das Programm aus, das er installieren möchte
  • steigendes Kontingent, in diesem Fall wird der Benutzer einfach die Menge an Speicherplatz eingeben, die er benötigt, oder vielleicht wählt er die vordefinierten Mengen - 1 GB, 10 GB usw. ...
  • Erstellen Sie einen neuen E-Mail-Alias, in diesem Fall wird der Benutzer einfach den Alias ​​eingeben.
  • ...

Ich habe darüber nachgedacht, nur ein Modell UserRequests mit dem Verweis auf den Absender und zwei optionale Attribute wäre eine reference_id, die sich auf andere Tabellen beziehen würde (für Beispiel das Programm, das er installiert haben will) und ein anderes würde für freie Typenfelder verwendet werden wie E-Mail Alias ​​oder Quota.

Mein Problem ist also, dass das Modell basierend auf dem Typ der Anfrage entweder folgendes enthalten sollte:

  • Verweis auf andere Tabelle
  • Ganzzahldaten
  • Zeichenfolgedaten

Basierend auf dem Typ der Anfrage sollte die angegebene Aktion ausgeführt werden - wahrscheinlich E-Mail-Alias könnte von Schienen hinzugefügt werden, aber die Anwendung auf dem Computer des Benutzers wird von Hand installiert.

Hat jemand ein ähnliches Problem? Denkst du Polymorphismus für diese Art von Sachen zu verwenden ist eine gute Idee? Haben Sie Vorschläge zum Organisieren von Daten in den Tabellen?

    
Jakub Troszok 29.05.2009, 14:20
quelle

2 Antworten

8

Single Table Vererbung! Auf diese Weise können Sie für jede Art von Anfrage benutzerdefinierte Validierungen durchführen, während alle Anfragen in derselben Tabelle gespeichert sind.

%Vor%

Und natürlich, alias Ihre string_data und integer_data auf email oder was auch immer, um Ihren anderen Code ein wenig mehr Bedeutung zu haben. Lassen Sie das Modell die kleine Black Box sein, die alles verdeckt.

    
Ian Terrell 29.05.2009, 15:30
quelle
2

Ich würde polymorphe Assoziationen verwenden, die ein Modell zu mehr als einem anderen Modell mit einer einzigen Assoziation gehören lassen. Etwas wie das:

%Vor%
  • Wie immer hat Ryan Bates einen ausgezeichneten Railscast zum Thema.
John Topley 29.05.2009 15:09
quelle

Tags und Links