Как привести объект ActiveRecord к другому классу при использовании STI? - PullRequest
22 голосов
/ 07 августа 2010

В настоящее время я использую ActiveRecord для наследования одной таблицы.

Как я могу отлить одну из моих моделей из типа А в В? У них один и тот же родитель.

Ответы [ 3 ]

42 голосов
/ 07 августа 2010
5 голосов
/ 07 августа 2010

Вам не нужно приводить, так как Ruby не выполняет никакой проверки типов во время компиляции.Что вы пытаетесь достичь?

Допустим, у вас есть класс Dad и дочерние классы Son и Daughter.

. Вы можете просто создать переменную @dad и сохранить ее вэто либо Son, либо Daughter объект, и просто обрабатывайте его, как если бы это был Dad.Пока они отвечают на те же методы, это не имеет значения.Это понятие называется «печатание утки».

0 голосов
/ 07 августа 2010

Создайте новый экземпляр B для установки значений для атрибутов, которые он разделяет с A.

Что-то вроде:

class C < ActiveRecord::Base
end

class A < C
end

class B < C
end

@a = A.new(...)
@b = B.new(@a.attr1, @a.attr2, ..., @a.attrN)
...