2017-01-19 2 views
0

У меня есть следующий код моей модели Track.rb. Есть ли способ написать это, используя синтаксис Rails? Im использованием Rails 3.2Как бы написать этот SQL-запрос в синтаксисе Rails 3.2?

@track = Track.find(7) 


Submission.joins("LEFT JOIN missions ON missions.id = submissions.mission_id") 
      .joins("LEFT JOIN tracks ON tracks.id = missions.track_id") 
      .where("missions.track_id = ?", track.id) 

Модели:

Track.rb 
    has_many :missions 

Mission.rb 
    belongs_to :track 
    has_many :submissions 

Submission.rb 
    belongs_to :mission 
+0

Есть ли у вас отношения между этими моделями? Если это так, 'include' - это путь. – tadman

+0

Да, все мои модели настроены правильно –

+0

Если они есть, вы можете использовать эти отношения типа 'own_to', пытаясь загрузить нужные вам данные. 'includes' имеет эффект добавления соединения без всякого беспорядка переопределения того, что задействовано. Поэкспериментируйте немного и посмотрите, какие запросы он генерирует. Вы также можете настроить 'has_many: mission, through: tracks' и т. Д., Чтобы в первую очередь создать правильные отношения для этого. – tadman

ответ

1

Прежде всего, вы действительно должны присоединиться к левой missions? Вы фильтруете по missions.track_id, поэтому вам не нужны представления без миссий. В этом случае было бы более подходящим внутреннее соединение.

Далее, для чего вам нужно присоединиться tracks - вы не используете эту таблицу в следующем sql.

С этими мыслями, вы могли бы переписать код, как:

Submission.joins(:mission).where(missions: { track_id: track.id }) 
+0

Thats perfect, отлично работает! –

Смежные вопросы