25

我目前正在使用 ActiveRecord 单表继承。

如何将我的模型从 A 类型转换为 B?他们有同一个父母。

4

4 回答 4

49

#becomes是您正在寻找的:

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-becomes

于 2010-08-06T22:59:17.493 回答
5

您不需要强制转换,因为 Ruby 在编译时不执行任何类型检查。你想达到什么目的?

假设你有一个类Dad,还有子类SonDaughter

您可以只拥有一个变量@dad 并在其中存储 aSonDaughter对象,然后将其视为Dad. 只要他们响应相同的方法,就没有区别。这是一个称为“鸭子打字”的概念。

于 2010-08-06T22:23:01.260 回答
2

如果我们有类似以下的内容

class A < ApplicationRecord
end

Class B < A
end

我们可以使用变得

a = A.first
b = a.becomes(B)

或相反亦然

于 2020-06-19T08:09:01.680 回答
-2

创建 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)
于 2010-08-06T21:52:08.527 回答