Rails: belongs_to vs has_one
-
23-08-2019 - |
Domanda
Un po 'di una domanda newbie sulle associazioni rotaie.
Ho un modello Bug, e un modello di stato. Stato è fondamentalmente solo un tavolo coppia chiave / valore. Tra le scelte disponibili, direi Bug has_one Stato ha più senso. Tuttavia, secondo questo
Contenuto belongs_to ContentTemplate. Partire indietro e guardare a come ho descritto la problema, e vedrete che funziona. Con belongs_to, la tabella accetta la responsabilità per la chiave esterna. Così Contenuto ha un content_template_id. E ContentTemplate non ha bisogno di nulla. Posso indicare a piacimento. Fatto.
Bug belongs_to Stato sarebbe più opportuno (dal Bug dovrebbe prendere la chiave esterna). Semanticamente, il suo esempio ha un senso, ma la mia fa nessuno. Questo è solo un capriccio di rotaie dove in questa situazione sembra strano, o sono io senza capire qualcosa / facendo male?
Soluzione
Sì, penso che hai appena trovato uno scenario un po 'strano-guardando in Rails. Suppongo che potrebbe essere utile per visualizzare "stato" come una specie di categoria a cui appartiene il bug - in quella luce, ha senso
.Altri suggerimenti
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
non ha spiegato con precisione che tipo di rapporto tra il Bug e di stato che si desidera ottenere, ma suppongo che voi siete interessati a uno dei seguenti:
- uno-a-molti: in questo caso ci dovrebbe essere
has_many
in classe Bug ebelongs_to
in classe Stato, - uno-a-uno. In questo caso ci dovrebbe essere
has_one
in classe Bug ebelongs_to
in classe Stato
In entrambi i casi di stato contiene la chiave esterna. Nel secondo caso il testo è un po 'strano, a causa del fatto che uno-a-uno è infatti asimmetrica (ci dovrebbe essere un FK su un solo lato).
Se lo stato è solo una tabella di look-up / valore-chiave, suona come si potrebbe desiderare un HABTM (has_and_belongs_to_many
) rapporto tra Stato e Bug. Con HABTM, quello che ritroverete con è un bugs_statuses
join tabella che ha bug_id
e status_id
colonne con i bug e gli stati tabelle.