我有两个模型:播放器和事件,它们之间有两个连接表,参与者和课程。
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
,生成的查询将使用课程连接表而不是参与者。
有没有更好的方法来做到这一点?
编辑:以下是联接表模型:
class Lesson
belongs_to :player
belongs_to :event
end
class Participant
belongs_to :player
belongs_to :event
end
答案 0 :(得分:0)
您可以使用class_name选项更改其中一个has_many关联的名称,但仍与其他类关联。在我的示例中,我在students
到players
上使用event
lessons
,在lectures
上使用events
player
通过lessons
。但是你的名字可能会有所不同。
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