Rails 3. Как моделировать людей? - PullRequest
2 голосов
/ 26 октября 2011

У меня есть это приложение для выставления счетов.

В настоящее время у меня есть эти 4 модели:

Люди:

  • Контакты (они как клиенты, им будут отправлены счета)
  • Пользователи (люди, отправляющие счета)
  • Компания (пользователи принадлежат компании)
  • Организация (контакты принадлежат организации).

Эта текущая настройка на самом деле не щелкает. Это не кажется естественным.

Другой вариант, о котором я подумал, - создать модель People, принадлежащую Организации.

Люди, у вас будет столбец type_id (типы: client, admin, добавьте больше в будущем)

Но я не знаю, почему-то кажется, что столбец type_id не должен быть там, чтобы ссылаться только на таблицу из двух строк.

Какую модель настройки вы бы использовали в этом случае?

---- Добавлено для уточнения: ----

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

Пользователь представляет лицо, которое входит в систему и отправляет счет. Он принадлежит компании.

Контакт представляет лицо, которому выставляется счет, он может принадлежать или не принадлежать организации.

models

Ответы [ 3 ]

3 голосов
/ 26 октября 2011

Полиморфные ассоциации могут помочь в вашей ситуации.

Поскольку все эти объекты являются людьми, вы можете реализовать что-то вроде этого:

Model

1 голос
/ 26 октября 2011

Ваша текущая настройка не кажется мне слишком плохой.

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

Насколько важны поля компании и организации? Могут ли контакты, которым будут отправляться счета, просто иметь текстовое поле для названия и адреса компании? Может быть, это поможет упростить вещи.

1 голос
/ 26 октября 2011

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

Но если у вас есть совершенно отдельный Контакт и Пользователь, и Контакты не могут даже войти в систему или не делить поля с Пользователями, вы должны сделать это отдельной моделью.

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