0

我有以下型号

class User << ActiveRecord::Base 
    has_many :acknowledgements
end

class Event << ActiveRecord::Base
    has_many :acknowledgements
    has_many :tracks, through: event_track
end

class Acknowledgement << ActiveRecord::Base
    belongs_to :user
    belongs_to :event
end

class Track << ActiveRecord::Base
    has_many :event_tracks
    has_many :events, through: event_tracks
end

class EventTrack << ActiveRecord::Base
    belongs_to :event
    belongs_to :track
end

如上所示,用户可以确认参加了活动。一个轨道是一组事件,一个事件可以属于多个轨道。当用户确认参加该曲目下的所有活动时,我们说用户完成了该曲目。

我的问题是,有没有办法找到用户使用 ActiveRecord 查询界面完成的所有曲目?

提前致谢。

4

1 回答 1

0

您应该能够从曲目末尾开始查询,因为这是您希望返回的输出:

user = User.first
Track.joins(events: :acknowledgements).where(complete: true, events: { acknowledgements: { user_id: user.id })

在这里,您出于性能目的急切地加载轨道的事件及其确认,然后(假设存在此列)检查轨道是否完整并且事件的确认包含您的用户。

您签user_idacknowledgements表的原因是为了避免必须users在查询中预加载以提高性能。

希望对您有所帮助-让我知道您的进展情况或有任何疑问。

于 2018-12-07T10:38:18.583 回答