STI和子类

时间:2010-06-11 19:39:43

标签: ruby-on-rails ruby

我想知道,什么是将子类记录转换为另一个子类记录的rails方式,只是改变类型不起作用,也是超类到子类,反之亦然。

提前致谢

Markiv

3 个答案:

答案 0 :(得分:2)

您只需更改类型字段即可。确保保存记录,并从数据库重新加载Ruby对象。

如果这不起作用,你能提供一些隔离问题的Ruby代码吗?

答案 1 :(得分:0)

您是否在询问如何将作为子类的对象更改为其超类的不同子类?在OO方案中,这实际上是不可能的。可以将对象从超类转换为子类,但不能将其强制转换,因为该对象现在可能包含超类所不具有的变量和方法。

答案 2 :(得分:0)

Rails中的多态性可以解决这个问题:

subclass1record.becomes(Subclass2)

注意:新实例将共享指向与原始类相同属性的链接。因此,任何一个实例中对属性的任何更改都会影响另一个。

为避免这种情况,您可以先复制记录:

subclass1record_new = subclass1record.dup

然后使用新记录:

subclass1record_new.becomes(Subclass2)

http://apidock.com/rails/ActiveRecord/Persistence/becomes