2017-06-22 27 views
0

私は2つのモデルがあります:プレーヤーとイベントの間に2つの結合テーブル、参加者とレッスンがあります。Rails:同じ2つのモデル間の複数の結合テーブル

class Event 
    has_many :participants 
    has_many :players, through: :participants 

    has_many :lessons 
    has_many :players, through: :lessons 
end 

class Player 
    has_many :participants 
    has_many :events, through: :participants 

    has_many :lessons 
    has_many :events, through: lessons 
end 

は、すべてのイベントには、レッスンを持っていないが、私は二つに結合テーブルを分割する理由すべてのイベントは、それゆえ、参加者を持っています。

問題は、私が@player.eventsを実行すると、結果のクエリは参加者の代わりにレッスンの参加表を使用するということです。

これを行うには良い方法がありますか?

EDIT:ここが結合テーブルのモデルです:

class Lesson 
    belongs_to :player 
    belongs_to :event 
end 

class Participant 
    belongs_to :player 
    belongs_to :event 
end 
+0

イベントに所属することが欲しいと思われます。 –

+0

ありがとうございます。私は、オリジナルを更新して、belongs_toイベントを含む結合表(レッスンおよび参加者)のモデルを表示しました。他のアイデアはありますか? – aprilone

答えて

0

あなたはhas_manyの団体の1つの名前を変更するが、それでも他のクラスに関連付けるCLASS_NAMEオプションを使用することができます。私の例では、はeventからlessonslecturesはからlessonsにはstudentsを使用しています。しかし、あなたがそれらの名前を付けることは異なる可能性があります。

class Event 
    has_many :participants 
    has_many :players, through: :participants 

    has_many :lessons 
    has_many :students, through: :lessons, class_name: "Player" 
end 

class Player 
    has_many :participants 
    has_many :events, through: :participants 

    has_many :lessons 
    has_many :lectures, through: lessons, class_name: "Event" 
end 
+0

こんにちはマイケル。ご協力いただきありがとうございます。私は上手く理解できていない気がします。 'class_name:" Player "と' class_name: "イベント"をモデルに追加すると、 '@ player.events'はまだレッスンの参加表**を使用しています**参加者ではありません... – aprilone

+0

あなたはまだ持っていますか? 'has_many:events、...'のように、あるいはそれらの名前の名前を変更しましたか?もしあなたが ':events'を何か他のものに変更しなければ、起こっていることは2番目のhas_manyです。最初のものを上書きする。 –

+0

今すぐご利用いただきありがとうございます! – aprilone

関連する問題