3

STI を使用する複数のサブクラスを持つ親モデルアカウントがあります。belongs_to 関係を使用して、別のモデルTransactionをAccountに関連付けたいと考えています。参照されるアカウントは、AssetまたはLiabilityのいずれかです。

class Account < ActiveRecord::Base end
class Asset < Account end
class Liability < Account end

私の取引モデルは、アカウントに属している

class Transaction < ActiveRecord::Base
  belongs_to :account #Either an Asset or Liability model
end

トランザクションのアカウントを資産または負債のいずれかに設定できるようにしたいと考えています。ただし、親クラスAccountではないため、トランザクションのアカウントを Asset または Liablity に設定すると TypeMismatch エラーが発生します。

注:これは、belongs_to 関連付けのポリモーフィズムを使用して解決できると思いますが、参照されるモデルがすべて同じ基になるテーブルを使用する場合、型列でクラスを指定する必要はないようです。

4

1 に答える 1

2

このコードはそのまま機能することがわかりました。関連モデルのポリモーフィック タイプを STI モデルに指定する必要はありません。

タイプの不一致エラーは、私の STI ベース クラスが実際には "Account::Base" であり、単に "Account" というクラス名を持っていたためです。

于 2011-01-31T05:39:56.400 に答える