2

この関連付けを正しく設定する方法がわかりません。has_and_belongs_to_manyまたは多型has_many:through?

私には、ミュージシャン、バンド、マネージャの3つのモデルがあります。それらのそれぞれは、それらに関連する特定の「レベル」(ストレス、幸福など)を有することができる。

しかし、私は正しく、他の3

と私のレベルモデルに関連するかどうかはわかりませんが、私にhas_manyのいくつかの並べ替えが必要です:それは多形だを通じて?そして、私はそれをどのように設定しますか?私が必要とする他のタイプの関連がありますか?

enter image description here

+0

明確にするために、レベルは、ミュージシャンのインスタンス、またはすべてのミュージシャンと関連していますか? – bdon

答えて

0

これはあなたがモデルの特定のクラスに割り当てることができる属性を定義している場合であれば、あなたはおそらくより多くの従来のアプローチを使用します。 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_typeleveled_idを追加する必要があります。

0

うん、これはポリモーフィックな関連になります。