编辑:重写整个问题!
class Product < ActiveRecord::Base
end
class ExternalProduct < Product
end
Rails 有一种将 ExternalProduct 转换为 Product 的方法,这就是我正在寻找的方法。所以我们希望在这个断言中有一个真值:
assert ExternalProduct.some_method == Product
编辑:我不是在寻找如何断言这一点。我正在研究如何将 ExternalProduct 转换为 Product。
编辑2:
如果这是我的输入:
:external_product
如何在不知道任何子类化或 STI 的情况下将其转换为正确的模型,即
Product
? 最佳答案
ExternalProduct.base_class
是你想要的方法。
与 superclass
不同,它实际上会为您提供 STI 基类,因此如果层次结构发生变化或您完全传入不同的对象,它仍会返回适当的类。
请参阅 base_class
的源代码,以及 STI 内部机制 here 如何使用它。
关于ruby-on-rails - Rails 如何将 STI 模型转换为其父模型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15658171/