2010-07-09 9 views
7

Ich möchte ein Status Modell haben, das nach einigen benutzerdefinierten Einstellungen relativ statisch sein wird (und verschiedene Benutzer können unterschiedliche Werte im Status haben). Der Status kann für verschiedene Modelle gelten, z. B. Contact und Event.Sollte ich has_one oder ostens_to in Ruby on Rails verwenden?

so der zurückgegebenen Status von contact.status wird von event.status

unterschiedlich sein ich die app entwerfen will, so dass Statustabelle verschiedene Typen (contacts und events) hat.

Was ist die richtige Strategie und das richtige Format dafür?

Ich denke an :has_one Status im Contact Modell erklärt, und :status_id in der :contacts Tabelle zu speichern. Dito mit Event.

:statuses Tabelle hat den Status Wert, Typ und Datum.

macht das Sinn? Können Sie einen besseren Ansatz vorschlagen?

Antwort

7

Es gibt eine guide on this sehr Frage. Ihre Situation ist insofern etwas anders, als es scheint, dass Ihr Statusmodell wirklich polymorph sein muss, da verschiedene Dinge "statusfähig" sind.

Um Ihre Frage zu beantworten, macht Kontakt/Event has_one Status für mich Sinn.

+1

mein Statusmodell ist polymorph .... Ich habe es oben bearbeitet .... Ich frage mich, ob ich die Dinge einfach machen sollte, da es schwer zu suchen scheint ... härter als ich dachte – Angela

1

Erstens speichert die has_one-Beziehung keine ID im aktuellen Modell. Es sucht nach einem Fremdschlüssel in der relativen Tabelle. Um eine status_id in Kontakte oder Events zu speichern, verwenden Sie die Option gehört_zu.

Zweitens, abhängig von der Art der Informationen, die Sie in Status speichern, warum muss es eine eigene separate Tabelle sein? Warum nicht eine Statusspalte in jedem Modell erstellen, für das Sie den Status verwenden möchten? Ein wenig mehr Informationen können hier nützlich sein.

+1

Nun ... könnte es sein. Es schien so, als hätte ich ERDs gesehen, wo bestimmte Attribute, die ziemlich standardisiert waren, eher separate Tabellen waren. Da sich, wie oben erwähnt, die Statuswerte nicht viel ändern, schien es, als ob das in der eigenen Tabelle der Fall wäre, zumal es als Drop-Down- oder Auto-Vervollständigung als Attribut zur Verfügung gestellt wird. – Angela

2

Nur um die Antwort in einer allgemeineren Einstellung zu vervollständigen, kann das Ihre Wahl beeinflussen: belongs_to Assoziation wird in dem Modell verwendet, das den Fremdschlüssel hat.

+0

das ist nicht wahr . Fremdschlüssel kann auch auf einem has_many verwendet werden, wenn die Verknüpfung nicht abgeleitet werden kann. – sabaeus