【发布时间】:2011-07-27 18:17:54
【问题描述】:
所以我最近一直在研究单表继承,发现了这个常见的问题/答案:
问题:如何将对象
obj的类从 Alpha 更改为 Beta,假设 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 如何处理继承),那就太棒了。
【问题讨论】:
标签: ruby ruby-on-rails-3 single-table-inheritance duck-typing