Rails - comment le code »peut appartenir à?
-
21-09-2019 - |
Question
Je travaille sur une application Rails qui contiendra des informations sur un tas de gens. Il y a deux cas d'utilisation:
- Un administrateur entre et maintient le profil d'une personne
- La personne peut décider de vous inscrire, connectez-vous et maintenir leur propre profil
Je suis en train de travailler sur la relation entre le profil et l'utilisateur. En ce moment, il est que profile belongs_to :user
et user has_one :profile
.
Mais cette pause, parce que certains profils ont pas encore utilisateur - ils sont tenus par l'administrateur. Dans ce cas, la colonne de user_id
dans profiles
est nulle, la jointure échoue, et la page ne se charge pas. ++
Comment pourrais-je mettre en place un "peut-être belongs_to" genre de relation?
++ (En fait, il vient en blanc, sans erreur affichée et development.log
n'a pas d'erreurs non plus, mais je peux voir que ce n'est pas terminé toutes les requêtes qu'il fait pour un profil qui n'a un utilisateur. Si quelqu'un sait comment je peux obtenir un message d'erreur utile à la place, ce serait aussi grand.)
La solution
Ceci est la bonne façon de le faire. belongs_to
ne l'empêche pas de valeurs null
, et cela ressemble à ce que vous voulez.
La « page » pour un profil qui ne lui appartient pas encore à un utilisateur pourrait ne pas avoir autant de requêtes, parce qu'il n'y a pas besoin (ou moyen) pour interroger la table des utilisateurs pour ce profil.
Vous devriez vérifier profile.user
pour nil
et présenter votre point de vue en conséquence.
Autres conseils
Si un Profile
appartient vraiment à un User
, alors il ne devrait jamais être nul (tout comme il n'a pas de sens d'envisager une Engine
sans Car
il est attaché). Donc, vous devez supprimer l'association Profile.belongs_to :user
.
Maintenant, vous devriez être en mesure de modifier librement Profiles
et simplement les attacher à un User
une fois qu'ils sont prêts. Mais vous avez un autre problème:
La personne peut décider de vous inscrire, connectez-vous et maintenir leur propre profil
Comment le système identifie de manière fiable quel profil pré-créé appartient à un utilisateur particulier qui ne dispose pas encore de profil? C'est un problème de conception, vous devez trier.