Rails - Como codificar 'pode pertencer?'
-
21-09-2019 - |
Pergunta
Estou trabalhando em um aplicativo Rails que conterá informações sobre um monte de pessoas. Existem dois casos de uso:
- Um administrador entra e mantém o perfil de uma pessoa
- A pessoa pode decidir se inscrever, fazer login e manter seu próprio perfil
Estou tentando descobrir o relacionamento entre o perfil e o usuário. Agora, é isso profile belongs_to :user
, e user has_one :profile
.
Mas isso quebra, porque alguns perfis ainda não têm usuário - eles são mantidos administradores. Nesse caso, o user_id
coluna in profiles
é nulo, a junção falha e a página não carrega. ++
Como posso configurar um tipo de relacionamento "possivelmente pertencente_to"?
++(Na verdade, fica em branco, sem erro exibido, e development.log
Também não possui erros, mas posso ver que não está terminando todas as consultas que faz para um perfil que possui um usuário. Se alguém souber como posso obter uma mensagem de erro útil, isso também seria ótimo.)
Solução
Esta é a maneira certa de fazê -lo. belongs_to
não evita null
valores, e isso soa como o que você deseja.
A "página" para um perfil que ainda não pertence a um usuário pode não ter tantas consultas, porque não há necessidade (ou maneira) de consultar a tabela de usuários para esse perfil.
Você deve verificar profile.user
por nil
e apresentar suas opiniões de acordo.
Outras dicas
Se um Profile
realmente pertence a um User
, então nunca deveria ser nulo (assim como não faz sentido considerar um Engine
sem o Car
está ligado a). Então você precisa excluir o Profile.belongs_to :user
Associação.
Agora você deve ser capaz de editar livremente Profiles
e simplesmente anexá -los a um User
Uma vez que eles estiverem prontos. Mas você tem outro problema:
A pessoa pode decidir se inscrever, fazer login e manter seu próprio perfil
Como o sistema identifica de maneira confiável qual perfil pré-criado pertence a um usuário específico que ainda não possui um perfil? Esse é um problema de design que você terá que resolver.