编辑:重写整个问题!

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/

10-09 04:26