Rails - как закодировать 'может принадлежать?'

StackOverflow https://stackoverflow.com/questions/2491988

  •  21-09-2019
  •  | 
  •  

Вопрос

Я работаю над приложением Rails, которое будет содержать информацию о группе людей.Существует два варианта использования:

  1. Администратор вводит и поддерживает профиль пользователя
  2. Пользователь может решить зарегистрироваться, войти в систему и поддерживать свой собственный профиль

Я пытаюсь разобраться в взаимосвязи между профилем и пользователем.Прямо сейчас, это то, что 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 как только они будут готовы.Но у вас есть еще одна проблема:

Пользователь может решить зарегистрироваться, войти в систему и поддерживать свой собственный профиль

Как система надежно определяет, какой предварительно созданный профиль принадлежит конкретному пользователю, у которого еще нет профиля?Это проблема дизайна, с которой вам придется разобраться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top