25

現在、ActiveRecord の単一テーブル継承を使用しています。

モデルの 1 つをタイプ 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、および子クラスSonおよびがあるとしDaughterます。

変数 @dad を使用して、SonまたはDaughterオブジェクトのいずれかを格納し、それをDad. 同じメソッドに応答する限り、違いはありません。これが「ダックタイピング」という概念です。

于 2010-08-06T22:23:01.260 に答える
-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 に答える