Наследование от объекта ActiveRecord - PullRequest
3 голосов
/ 24 февраля 2011

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

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

  • специальные функции
  • специальные переменные
  • пользовательские отношения (Работодатель имеет_много компаний, Сотрудник принадлежит_компании:)

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

  • Пользователь
  • Работодатель <Пользователь </li>
  • Сотрудник <Пользователь </li>
  • Клиент <Пользователь </li>

Каков наилучший способ сделать что-то подобное?

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 февраля 2011

Многие приложения начинаются с какой-то модели User. Со временем, по мере появления разных типов пользователей, может иметь смысл проводить более четкое различие между ними. Классы Admin и Guest представлены как подклассы User. Теперь общее поведение может находиться в User, а поведение подтипа может передаваться подклассам. Однако все пользовательские данные могут по-прежнему находиться в таблице пользователей.

Все, что вам нужно сделать, это добавить столбец type в таблицу users, который будет содержать имя класса, который будет создан для данной строки. Active Record заботится о создании объекта такого типа при загрузке его из базы данных.

Этот метод называется Наследование одной таблицы или STI (для краткости).

Очень хорошая недавняя статья о ИППП находится здесь: http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html

1 голос
/ 24 февраля 2011

Посмотрите эту ветку на подклассах моделей:

Модели подклассов в Rails

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