所以我最近一直在研究单表继承,并找到了这个常见的问题/答案:
obj
问题:在 STI 中,假设 Beta < Alpha,如何将对象的类别从 Alpha 更改为 Beta?答:ruby 是一种鸭式语言,所以你不用强制转换。但是您需要做的就是将“type”变量设置为“Beta”并保存对象,下次加载 Alpha 对象时,它将是 Beta 类型:
obj = Alpha.new obj.save #now obj is of type Alpha obj.type = "Beta" obj.save #now obj is of type Beta
但是,这种方法似乎对我不起作用。虽然 obj 确实可以正确保存,但它似乎根本不能用作 Beta 对象。它在不运行 Beta 验证的情况下保存,当我检查时obj.respond_to?(:beta_method) #beta_method being a method in the beta class
,它返回 false。这种方法不起作用吗?有正确的方法吗?还是我只是做错了什么?
编辑
我发现当我执行 Alpha.last.respond_to(:beta_method) 时它返回 false,而 Beta.last.respond_to(:beta_method) 返回 true(但是 Alpha.last 和 Beta.last 返回相同的对象)。有趣的发展?不过,如果有人能详细解释这一点(关于 ruby 如何处理继承),那就太棒了。