これはあなたがモデルの特定のクラスに割り当てることができる属性を定義している場合であれば、あなたはおそらくより多くの従来のアプローチを使用します。 kind
の代わりにrecord_type
のようなものを使用し、その代わりにスコープを作成してください。
あなたがそれらをフェッチする方法は、エンティティとこの列の間の関係ではなくアクセッサメソッドを作成することです。このような何か:
def levels
Level.for_record_type(self.class)
end
for_record_type
はスコープです:
scope :for_record_type, lambda { |record_type|
where(:record_type => record_type.to_s)
}
クラスの代わりに、他のモデルのインスタンスとモデルを関連付けるための規則はありません。
class Level < ActiveRecord::Base
belongs_to :leveled, :polymorphic => true # maybe there's a better word than "leveled"
end
class Musician < ActiveRecord::Base
has_many :levels, :as => :leveled
end
あなたのレベルテーブルにleveled_type
とleveled_id
を追加する必要があります。
明確にするために、レベルは、ミュージシャンのインスタンス、またはすべてのミュージシャンと関連していますか? – bdon