Как создать дочерний объект из полиморфного объекта в Rails - PullRequest
0 голосов
/ 14 января 2012

У меня есть два класса, Tutor и Session, которые совместно используют один и тот же дочерний класс Field в полиморфных отношениях.

Когда преподаватель создает сеанс, я бы хотел, чтобы заголовок автоматически копировался из Tutor в Session (т.е. в таблицу «Поле» будет добавлена ​​новая запись). Например,

t = Tutor
Session.fields.build_from_tutor(t.fields)

Я просто составляю метод build_from_tutor. Есть ли способ Rails / Ruby сделать это?

Спасибо.

1 Ответ

1 голос
/ 14 января 2012

Если вы хотите, чтобы существовали те же записи, что и у потомков двух классов, это не полиморфно;это просто путанное наследство.Либо Tutor has_many :sessions, и Session has_many :fields, и, следовательно, Tutor has_many :fields, :through => :sessions, либо поочередно, Tutor has_many Sessions, :as => :fieldable, Session has_many :fields, :as :feildable и Field belongs_to :fieldable, :polymorphic => true, но это исключит возможность совместного использования Tutor и Session поле.

Так что вам нужно это выяснить.Тогда вы можете потренироваться в здравом уме.Но, как бы у вас это ни было, вы никогда не сможете нормализовать модель данных.Даже для Rails-приложений вы должны придерживаться 3NF как минимального стандарта, ИМХО.

...