Carriles - la forma de código 'puede pertenecer a?'
-
21-09-2019 - |
Pregunta
Estoy trabajando en una aplicación Rails que contendrá información sobre un grupo de personas. Hay dos casos de uso:
- Un administrador entra y mantiene el perfil de una persona
- La persona puede decidir registrarse, iniciar sesión, y mantener su propio perfil
Estoy tratando de averiguar la relación entre el perfil y el usuario. En este momento, es que profile belongs_to :user
y user has_one :profile
.
Pero esto se rompe, debido a que algunos perfiles de usuario no tienen todavía - que son mantenido por el administrador. En ese caso, la columna de la user_id
en profiles
es nulo, la unión falla, y la página no se carga. ++
¿Cómo puede establecer un "posiblemente belongs_to" tipo de relación?
++ (En realidad, se trata arriba en blanco, la muestra ningún error y development.log
no tiene ningún error, ya sea, pero puedo ver que no es terminar todas las consultas que hace por un perfil que tiene un usuario. Si alguien sabe cómo puedo recibir un mensaje de error útiles en cambio, que también sería grande.)
Solución
Esta es la forma correcta de hacerlo. belongs_to
no impide que los valores null
, y esto suena como lo que quiere.
La "página" de un perfil que aún no pertenecen a un usuario podría no tener tantas preguntas, porque no hay necesidad (o forma) para consultar la tabla de usuarios para ese perfil.
Se debe comprobar profile.user
para nil
y presentar sus puntos de vista en consecuencia.
Otros consejos
Si un Profile
realmente pertenece a una User
, entonces no debe nunca ser nulo (al igual que no tiene sentido considerar un Engine
sin la Car
al que está conectado). Así que hay que eliminar la asociación Profile.belongs_to :user
.
Ahora usted debería ser capaz de editar libremente Profiles
y simplemente conectar a un User
Una vez que estén listos. Pero tiene otro problema:
La persona puede decidir registrarse, iniciar sesión, y mantener su propio perfil
¿Cómo funciona el sistema de forma fiable a identificar qué pre-creado el perfil pertenece a un usuario particular que todavía no tiene un perfil? Eso es un problema de diseño que tendrá que resolver.