2016-02-15 3 views
0

A есть 3 модели: трейлер, фильм, релиз. Трейлер принадлежит к фильму, а также к фильму has_many релизы и has_many трейлеры.Rails & Active Record: сложный SQL-запрос

Я хочу сделать первый трейлер каждого фильма, имеющего выпуск.

Мой подход заключается в создании области в Trailer.rb:

scope :released, -> { 
    joins(:movie). 
    where("trailers.movie_id = movies.id"). 
    joins(:release). 
    where.not(:release => nil) 
    } 

Так что я мог бы назвать Trailer.released, но мой запрос не работает, вместо возвращения коллекции, это возвращение активную запись связь.

  1. Куда я ошибаюсь по своему запросу?
  2. Есть ли более эффективный способ сделать это?
+1

«вместо того, чтобы возвращать коллекцию, она возвращает активное отношение записи». Это одно и то же. – meagar

+0

Я предполагаю, что я имею в виду сказать. Я ожидаю получить вывод объектов трейлера. Но вместо этого я получаю , поэтому я не знаю, где это происходит. –

+0

@JacksonCunningham это скорее всего означает, что ваш SQL ошибочен. Чтобы убедиться, что отношение действительно, вызовите 'first', например, на нем. Он должен выплевывать либо объект, либо ошибку, говоря, что не так с запросом –

ответ

1
scope :released, -> { joins(movie: :releases) } 

бы вернуть все трейлеры, какие фильмы имеют выпуски.

+0

Вау, это выглядит просто. Я буду уверен, что он работает, тогда примите, спасибо! –

+1

Удивительно, спасибо –

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