Rotaie - come codificare 'possono appartenere a?'
-
21-09-2019 - |
Domanda
Sto lavorando su un'applicazione Rails che conterrà le informazioni su un gruppo di persone. Ci sono due casi d'uso:
- Un amministratore entra e mantiene il profilo di una persona
- La persona può decidere di iscriversi, accedere e gestire il proprio profilo
Sto cercando di capire il rapporto tra il profilo e l'utente. In questo momento, è che profile belongs_to :user
e user has_one :profile
.
Ma questo si rompe, perché alcuni profili non hanno ancora nessun utente - sono amministratore mantenuto. In tal caso, la colonna user_id
in profiles
è nullo, il join non riesce, e la pagina non viene caricata. ++
Come potrei istituire un "possibilmente belongs_to" tipo di rapporto?
++ (In realtà, si tratta in bianco, senza alcun errore visualizzato, e development.log
non ha errori sia, ma vedo che non è terminato tutte le query fa per un profilo che ha un utente. Se qualcuno sa come posso ottenere un messaggio di errore utile, invece, che sarebbe anche bello.)
Soluzione
Questo è il modo giusto per farlo. belongs_to
non impedisce valori null
, e questo suona come quello che vuoi.
La "pagina" per un profilo che ancora non appartiene a un utente potrebbe non avere il maggior numero di domande, perché non c'è alcuna necessità (o modo) per interrogare la tabella degli utenti per tale profilo.
Si dovrebbe controllare profile.user
per nil
e presentare le vostre opinioni di conseguenza.
Altri suggerimenti
Se un Profile
appartiene davvero ad un User
, allora non dovrebbe mai essere nulla (proprio come non ha senso prendere in considerazione un Engine
senza il Car
è attaccato). Quindi è necessario eliminare l'associazione Profile.belongs_to :user
.
Ora si dovrebbe essere in grado di modificare liberamente Profiles
e semplicemente collegarli a un User
una volta che sono pronti. Ma hai un altro problema:
La persona può decidere di iscriversi, accedere e gestire il proprio profilo
Come funziona il sistema in modo affidabile identificare quali pre-creato il profilo appartiene a un particolare utente che non dispone ancora di un profilo? Questo è un problema di progettazione si dovrà risolvere.