Rails ActiveRecord Вопрос - PullRequest
       7

Rails ActiveRecord Вопрос

1 голос
/ 03 сентября 2010

Наследование в одной таблице с использованием ActiveRecord. Так как мы можем использовать @test = Employee.all и найти всех созданных сотрудников. Как рельсы это делают? Поскольку мы используем только таблицу пользователей. Как он узнает о сотрудниках и извлекает только сотрудников? Рельсы магия? Объяснение кому-нибудь? Заранее спасибо.

Base Class : Person (inherits ActiveRecord)
Sub-Class: Employee, Supervisor, Manager (each inherit Person)

Так что моя таблица Person должна иметь поля _type и _id, чтобы сделать таблицу полиморфной.

Мой следующий вопрос: как мне связать Employee с таблицей Person, и когда вы сохраняете сотрудника, как получить его для фактического добавления Employee в поле person_type?

Ответы [ 2 ]

3 голосов
/ 03 сентября 2010

Чтобы указать Ruby on Rails, что таблица пользователей должна поддерживать наследование одной таблицы, необходимо добавить столбец с именем «тип» в таблицу пользователей.Вот мое определение таблицы пользователей:

CREATE TABLE users (id INT NOT NULL AUTO_INCREMENT, user VARCHAR (15) NOT NULL UNIQUE, передать VARCHAR (40) NOT NULL, ввести VARCHAR (20) NOT NULL, PRIMARY KEY(Я бы) );

В столбце с именем type следует хранить имя класса, тип класса, который должен использоваться для каждого пользователя.Чтобы пометить определенного пользователя в качестве администратора, установите его тип «Администратор».Устанавливая тип пользователя «Администратор», вы предоставляете ему полные права администратора, определенные в классе модели «Администратор».

http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/

2 голосов
/ 03 сентября 2010

Для наследования одной таблицы используется столбец type в таблице, чтобы указать тип объекта.ActiveRecord знает, что ваш класс Employee использует наследование одной таблицы (у него нет соответствующей таблицы, а у таблицы users / people есть столбец типа).

Поэтому, когда вы запрашиваете Employee.all, он знает, ищет ли все записи в таблице users / people, где type == 'Employee'.

Если вы посмотрите журналы, SQL будет отображаться дляэти запросы, и вы увидите, что происходит "волшебство".

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