Должен ли профиль пользователя быть отдельной моделью? - PullRequest
8 голосов
/ 10 ноября 2009

Я изучаю Rails, создавая простой сайт, где пользователи могут создавать статьи и комментировать эти статьи. У меня есть представление, в котором перечислены последние статьи пользователя и комментарии. Теперь я хотел бы добавить пользовательские профили, где пользователи могут вводить информацию, такую ​​как их местоположение, возраст и краткую биографию. Мне интересно, должен ли этот профиль быть отдельной моделью / ресурсом (у меня уже достаточно много полей в моей пользовательской модели, потому что я использую Authlogic и большинство его дополнительных полей).

Каковы плюсы и минусы использования отдельного ресурса?

Ответы [ 6 ]

4 голосов
/ 10 ноября 2009

Я бы порекомендовал сохранить столбцы профиля в модели User для ясности и простоты. Если вы обнаружите, что используете только определенные поля, выберите только те столбцы, которые вам нужны: выберите.

Если позже вы обнаружите, что по какой-то причине вам нужна отдельная таблица (например, у одного пользователя может быть несколько профилей), их разделение не займет много времени.

Я сделал ошибку, имея два стола, и это не принесло мне ничего, кроме дополнительной сложности.

4 голосов
/ 10 ноября 2009

Я думаю, вам лучше всего поставить отдельную модель. Подумайте о том, как модели соответствуют таблицам базы данных, а затем о том, как вы читаете их для различных вариантов использования, поддерживаемых вашим приложением.

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

Может быть, местоположение требуется каждый раз, когда вы отображаете пользователя (скажем, в комментарии, которое он оставил), но биография должна быть другой моделью? Вы должны выяснить правильную разбивку, но общее правило состоит в том, чтобы структурировать вещи так, чтобы вам не приходилось извлекать данные, которые не используются сразу.

4 голосов
/ 10 ноября 2009
  • Плюсы: упрощает каждую модель
  • Минусы: управлять 2 одновременно немного сложнее

Все сводится к тому, насколько велики пользователь и профиль. Если у пользователя 5 полей, а в профиле 3, то нет никакого смысла. Но если у пользователя 12 полей, а в профиле 20, то вам определенно следует.

3 голосов
/ 10 ноября 2009

Пользователь «владеет» различными ресурсами на вашем сайте, такими как комментарии и т. Д. Если вы отделяете профиль от пользователя, то это просто еще один ресурс. Пользователь статичен, а профиль время от времени будет меняться.

Разделение этого также позволит вам легко вести историю профиля.

2 голосов
/ 10 ноября 2009

Я бы держал это отдельно. Не все ваши пользователи захотят заполнить профиль, поэтому это будут пустые поля в вашей пользовательской таблице. Это также означает, что вы можете изменить поля профиля, не меняя логику вашей пользовательской модели.

0 голосов
/ 10 ноября 2009

Зависит от ширины существующей пользовательской таблицы. Базы данных обычно имеют ограничение на количество байтов, которое может содержать recird. Если вы близки (или превышаете предел, который вы обычно можете сделать, если у вас много полей с нулевыми значениями), я бы добавил таблицу с отношением один к одному для повышения производительности и уменьшения вероятности записи это внезапно не может быть вставлено, поскольку есть слишком много данных для размера строки. Если вы не достигли предела, добавьте в существующую таблицу.

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