Rails: belongs_to vs has_one
-
23-08-2019 - |
Frage
Ein bisschen Neuling Frage auf Schienen Assoziationen.
Ich habe ein Bug-Modell und ein Statusmodell. Der Status ist im Grunde nur ein Schlüssel / Wert-Paar-Tabelle. Von den Möglichkeiten zur Verfügung, würde ich Bug has_one Der Status sagen am meisten Sinn macht. Doch nach diese
Content belongs_to Content. Gehen und zurück schauen, wie ich beschrieben die Problem, und Sie werden sehen, dass es funktioniert. Mit belongs_to akzeptiert die Tabelle Verantwortung für den Fremdschlüssel. Damit Inhalt hat einen content_template_id. Und Content braucht nichts. Ich kann nach Belieben darauf zeigen. Fertig.
Bug belongs_to Der Status wäre besser geeignet (da Bug den Fremdschlüssel nehmen sollte). Semantisch macht sein Beispiel Sinn, aber ich macht keine. Ist das nur eine Marotte von Schienen, wo es in dieser Situation seltsam aussieht, oder bin ich nicht zu verstehen, etwas / tut es falsch?
Lösung
Ja, ich glaube, Sie haben gerade ein etwas seltsam aussehendes Szenario in Rails gefunden. Ich nehme an, es nützlich sein könnte, „Status“ als eine Art Kategorie die Fehler gehören zu denen zu sehen - in diesem Licht, macht es Sinn,
.Andere Tipps
TABLE:
Bug
id integer
desc string
status_id integer fk
Status
id integer
desc string
RAILS MODEL:
Bug
belongs_to :status
Status
has_many :bugs
Sie nicht erklären genau, welche Art von Beziehung zwischen Bug und Status Sie erhalten möchten, aber ich nehme an, Sie in eine der folgenden interessiert sind:
- one-to-many: In diesem Fall sollte es in Bug-Klasse und
has_many
in der Statusklassebelongs_to
werden, - one-to-one. In diesem Fall sollte es in Bug-Klasse und
has_one
in Zustandsklassebelongs_to
wird
In beiden Fällen Status, um den Fremdschlüssel enthält. Im zweiten Fall ist die Formulierung ein wenig merkwürdig, aufgrund der Tatsache, dass eine Eins-zu-Eins-Beziehung in der Tat asymmetrisch ist (es sollte auf der einen Seite ein FK sein only).
Wenn der Status nur eine Nachschau / Schlüsselwert-Tabelle ist, es klingt wie Sie eine HABTM (has_and_belongs_to_many
) Beziehung zwischen Status- und Bug. Mit HABTM, was Sie am Ende mit ist ein bugs_statuses
Tisch beitreten, die bug_id
und status_id
Spalte zusammen mit Ihrem Bugs und Status-Tabellen.