Вложенные Rails запросы - PullRequest
       1

Вложенные Rails запросы

0 голосов
/ 07 декабря 2018

У меня есть следующие модели

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?

Заранее спасибо.

1 Ответ

0 голосов
/ 07 декабря 2018

Вы должны быть в состоянии сделать это, начиная запрос с конца треков, так как это результат, который вы хотите вернуть:

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

Здесь вы стремитесь загрузить события треков и их подтверждения производительности.затем (предполагая, что этот столбец существует), проверьте, что дорожка завершена, и подтверждения событий содержат вашего пользователя.

Причина, по которой вы проверяете user_id в таблице acknowledgements, состоит в том, чтобы избежать предварительной загрузкиusers в запросе для повышения производительности.

Надеюсь, что это поможет - дайте мне знать, как у вас идут дела или если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...