8 Stimmen

Sollte ich has_one oder belongs_to in Ruby on Rails verwenden?

Ich möchte eine Status Modell, das nach einer benutzerdefinierten Einrichtung relativ statisch sein wird (und verschiedene Benutzer können unterschiedliche Werte für den Status haben).

Der Status kann für verschiedene Modelle gelten, z. B. Contact y Event .

so dass die Status, die von contact.status wird anders sein als event.status

Ich möchte die Anwendung so gestalten, dass die Statustabelle verschiedene Typen hat ( contacts y events ).

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

Ich denke daran, zu erklären :has_one Status dans le Contact Modell, und die Speicherung eines :status_id dans le :contacts Tisch. Das Gleiche gilt für Event .

:statuses Die Tabelle enthält den Statuswert, den Typ und das Datum.

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

9voto

theIV Punkte 24844

Es gibt eine Leitfaden zu diesem Frage zu stellen. Ihre Situation ist etwas anders, da es scheint, als ob Ihr Statusmodell wirklich polymorph sein muss, da verschiedene Dinge "statusfähig" sein werden.

Um Ihre Frage zu beantworten: Kontakt/Ereignis hat_einen Status macht für mich Sinn.

2voto

epsilones Punkte 10805

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

1voto

nuclearsandwich Punkte 455

Erstens speichert die has_one-Beziehung keine ID im aktuellen Modell. Es wird nach einem Fremdschlüssel in der relativen Tabelle gesucht. Um eine status_id in Contacts oder Events zu speichern, müssten Sie belongs_to verwenden.

Zweitens, je nach Art der Informationen, die Sie in "Status" speichern, warum muss es eine eigene Tabelle sein? Warum nicht eine Statusspalte in jedem Modell, für das Sie den Status verwenden wollen? Ein paar mehr Informationen könnten hier nützlich sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X