Pergunta

Estou trabalhando em um aplicativo Rails que conterá informações sobre um monte de pessoas. Existem dois casos de uso:

  1. Um administrador entra e mantém o perfil de uma pessoa
  2. 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.)

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top