Как использовать Mixin и ActiveRecord: основа вместе - PullRequest
1 голос
/ 27 июня 2011

Рассмотрим это простое приложение в RUby on Rails:

Ученик и учитель расширяет личность. Человек имеет 2 свойства, имя и возраст. Студент имеет 1 дополнительную собственность, класс. Учитель имеет 1 дополнительное имущество, зарплата.

Я хочу хранить информацию об ученике и учителе в отдельных таблицах БД. Я хочу воспользоваться служебным классом RoR ActiveRecord:Base для получения данных для этих моделей. Поскольку Person не ожидается создания экземпляра, я могу смешать его с Student & Teacher следующим образом:

class Student < ActiveRecord:Base
include Person
end

module Person
end

Вопрос:

  1. Это правильный способ реализации?
  2. Как реализовать это, не создавая таблицу базы данных с именем persons? Я хочу создать только 2 таблицы, а именно students и teachers, и обе должны иметь 3 свойства, упомянутые выше.

1 Ответ

1 голос
/ 27 июня 2011

Человек не должен быть моделью - это может быть библиотека / модуль (который вы затем смешиваете в соответствии с вашим примером).Вы бы сохранили это в RAILS_ROOT / lib.Ваши классы ученика и учителя могут быть моделями (которые используют AR :: Base), и человек может быть просто набором общих методов, используемых обоими.

В качестве альтернативы, если ваш дочерний класс намного сложнее - посмотритев "наследование одной таблицы" - описание которого выходит за рамки этого ответа ... но вы можете за него погуглить.

...