Rails - как кодировать «может принадлежать?» - PullRequest
3 голосов
/ 22 марта 2010

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

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

Я пытаюсь выяснить отношения между профилем и пользователем. Прямо сейчас, это то, что profile belongs_to :user и user has_one :profile.

Но это ломается, потому что некоторые профили еще не имеют пользователя - они обслуживаются администратором. В этом случае столбец user_id в profiles имеет значение null, соединение завершается неудачно, и страница не загружается. ++

Как я могу установить отношения типа "возможно, принадлежат_?" *

++ (На самом деле, он появляется пустым, без ошибок, и development.log также не имеет ошибок, но я вижу, что он не завершает все запросы, которые он делает для профиля, который действительно есть пользователь. Если кто-нибудь знает, как вместо этого получить полезное сообщение об ошибке, это также было бы здорово.)

Ответы [ 2 ]

4 голосов
/ 22 марта 2010

Это правильный способ сделать это. belongs_to не мешает null значениям, и это звучит как то, что вы хотите.

«Страница» для профиля, который еще не принадлежит пользователю, может иметь меньше запросов, поскольку нет необходимости (или способа) запрашивать таблицу пользователей для этого профиля.

Вы должны проверить profile.user для nil и соответственно представить свои взгляды.

0 голосов
/ 22 марта 2010

Если Profile действительно принадлежит User, то оно никогда не должно быть нулевым (точно так же, как не имеет смысла рассматривать Engine без Car, к которому он присоединен). Поэтому вам нужно удалить ассоциацию Profile.belongs_to :user.

Теперь вы сможете свободно редактировать Profiles и просто прикреплять их к User, как только они будут готовы. Но у вас есть другая проблема:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...