2011-06-30 10 views
0

私はメンバーがいるサイトで働いています。各メンバーにはサブスクリプションがあります。メンバーが3has_one:through Rails 3

が関連

class Member < ActiveRecord::Base 
    has_one :plan, :through => :subscription 
end 

class Subscription < ActiveRecord::Base 
    belongs_to :member 
    has_many :plans 
end 

class Plan < ActiveRecord::Base 
    belongs_to :subscription 
end 

が続い多分

member.plan 

このようなものは次のようになります行うには、この正しい方法ですがあるそのプランを選択する必要があるサブスクリプションのためにメンバーが購読されているプラ​​ン。メンバーは、一度に1つの計画に属している場合は、次のように

+0

単一のサブスクリプションに複数のプランまたは3つのプランのいずれかを設定できますか? –

+2

あなたの団体はあなたの記述と矛盾しているようです。 'Subscription'の' has_many:plans'の関連付けは、各サブスクリプションが0以上のプランを持つことができることを意味します。サブスクリプションにプランテーブルが格納されている場合、それは 'belongs_to:plan '。 –

+0

各メンバーには1つのプランしかありません。 has_many:planをhas_one:planに変更する必要があります。私は管理エリアに計画を作成する方法を持っていきたいと思っています。だから私は考えましたhas_many –

答えて

0

あなたのモデルをやり直すことができます。

class Member < ActiveRecord::Base 
    has_one :subscription 
    has_one :plan, :through => :subscription 
end 

class Subscription < ActiveRecord::Base 
    belongs_to :member 
    belongs_to :plan 
end 

class Plan < ActiveRecord::Base 
    belongs_to :subscription 
    has_many :members  
end 

他のソリューションはmembersテーブルにplan_id列を追加することによって、完全にSubscriptionモデルを避けるためです。

+0

ありがとう。私はサブスクリプションモデルを全く持たないというアイデアが気に入っていますので、どうもありがとうございます。 –