Rails - как закодировать 'может принадлежать?'
-
21-09-2019 - |
Вопрос
Я работаю над приложением Rails, которое будет содержать информацию о группе людей.Существует два варианта использования:
- Администратор вводит и поддерживает профиль пользователя
- Пользователь может решить зарегистрироваться, войти в систему и поддерживать свой собственный профиль
Я пытаюсь разобраться в взаимосвязи между профилем и пользователем.Прямо сейчас, это то, что profile belongs_to :user
, и user has_one :profile
.
Но это приводит к сбоям, потому что у некоторых профилей еще нет пользователя - они поддерживаются администратором.В этом случае, user_id
столбец в profiles
имеет значение null, соединение завершается ошибкой, и страница не загружается.++
Как я мог бы настроить отношения типа "возможно, belongs_to"?
++(На самом деле, он отображается пустым, без отображения ошибки, и development.log
в нем также нет никаких ошибок, но я вижу, что он не завершает все запросы, которые выполняет для профиля, в котором есть пользователь.Если кто-нибудь знает, как я могу вместо этого получить полезное сообщение об ошибке, это тоже было бы здорово.)
Решение
Это правильный способ сделать это. belongs_to
не мешает null
ценности, и это звучит так, как вы хотите.
"Страница" для профиля, который еще не принадлежит пользователю, может содержать не так много запросов, поскольку нет необходимости (или способа) запрашивать таблицу users для этого профиля.
Вы должны проверить profile.user
для nil
и изложите свои взгляды соответствующим образом.
Другие советы
Если a Profile
действительно принадлежит к User
, то оно никогда не должно быть нулевым (точно так же , как не имеет смысла рассматривать Engine
без Car
он прикреплен к).Итак, вам нужно удалить Profile.belongs_to :user
ассоциация.
Теперь вы должны иметь возможность свободно редактировать Profiles
и просто прикрепите их к User
как только они будут готовы.Но у вас есть еще одна проблема:
Пользователь может решить зарегистрироваться, войти в систему и поддерживать свой собственный профиль
Как система надежно определяет, какой предварительно созданный профиль принадлежит конкретному пользователю, у которого еще нет профиля?Это проблема дизайна, с которой вам придется разобраться.