Rails:相同两个模型之间的多个连接表

时间:2017-06-22 10:38:09

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有两个模型:播放器和事件,它们之间有两个连接表,参与者和课程。

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

1 个答案:

答案 0 :(得分:0)

您可以使用class_name选项更改其中一个has_many关联的名称,但仍与其他类关联。在我的示例中,我在studentsplayers上使用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