2016-12-27 3 views
0

Das Problem:Rails Verbindung mit einer (nicht-active) Klasse (kein Objekt/row)

Menschen viele Arten von Grad haben (Bachelor, Master, PhD, etc ...). In meinem Land schließt einige Grad einen anderen ein.

Bsp .: Superior Degree kann entweder Bachelor oder Lizentiat sein.

Ich möchte diese Struktur in einer Klassenhierarchie erstellen:

Bachelor < Superior < Degree 
Licentiate < Superior < Degree 
Master < Degree 
PHD < Degree 

Diese Klassen müssen keine Zeilen in der Datenbank gespeichert haben, aber ich möchte sie mit einigen Active Objekten assoziieren anderer Klassen.

Soll ich Klassen Name nur als Zeichenfolgen speichern?

+0

Polymorphe Assoziation verwenden. –

+0

[single table vererbung] (http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html) ist dein Freund – sa77

+0

Ich habe noch nicht versucht, aber polymorphe erfordert nicht {object} _id? (was ich nicht habe) –

Antwort

0

Assoziationen arbeiten zwischen Instanzen von Klassen, nicht Klassen selbst. Wenn Sie einfach eine Markierung benötigen, die auf eine bestimmte Art von Grad zeigt, können Sie eine ActiveRecord::Enum Eigenschaft auf der s Grad verwenden. Auf diese Weise können Sie Datensätze nach ihrem Grad auswählen.

Das heißt, ich würde sagen, Ihre Anforderungen rechtfertigen ein vollständiges ActiveRecord-Modell. Verwenden Sie die Vererbung einzelner Tabellen für die verschiedenen Abschlussarten oder sogar nur für eine Abschlussklasse, wobei die Eigenschaft "Name" oder "Typ" auf "Bachelor" usw. festgelegt wird. Dann eine Tabelle Zeile pro Grad-Typ, mit has_many (oder habtm, wenn es n: m) Assoziationen an sich selbst für die erforderlichen Grad. Die Grad würden dann mit regulären Schienen Assoziationen zugeordnet werden (oder polymorph, wenn Sie mit der STI-Variante gehen).

Wenn Sie überhaupt keine Tabelle möchten, können Sie auch ActiveModel::Associations verwenden, aber dann müssten Sie die verschiedenen Grad-Instanzen aus Code erstellen, was umständlich ist.

Verwandte Themen