我目前正在使用 ActiveRecord 单表继承。
如何将我的模型从 A 类型转换为 B?他们有同一个父母。
我目前正在使用 ActiveRecord 单表继承。
如何将我的模型从 A 类型转换为 B?他们有同一个父母。
您不需要强制转换,因为 Ruby 在编译时不执行任何类型检查。你想达到什么目的?
假设你有一个类Dad
,还有子类Son
和Daughter
。
您可以只拥有一个变量@dad 并在其中存储 aSon
或Daughter
对象,然后将其视为Dad
. 只要他们响应相同的方法,就没有区别。这是一个称为“鸭子打字”的概念。
如果我们有类似以下的内容
class A < ApplicationRecord
end
Class B < A
end
我们可以使用变得
a = A.first
b = a.becomes(B)
或相反亦然
创建 B 的新实例以设置它与 A 共享的属性的值。
就像是:
class C < ActiveRecord::Base
end
class A < C
end
class B < C
end
@a = A.new(...)
@b = B.new(@a.attr1, @a.attr2, ..., @a.attrN)