Отдельные рельсы - PullRequest
       8

Отдельные рельсы

6 голосов
/ 20 января 2011

Видео имеет много событий

Я пытаюсь получить все видео, для которых запланированы события в будущем.

У меня есть то, что уже было:

named_scope :scheduled_in_future, :joins => :event, :conditions => ["event.scheduled_start > ? AND event.status = ?", Time.now.to_i, 'PENDING']

Это работает, но если одно и то же Видео имеет несколько событий в будущем, это даст мне дубликаты Видеозаписей. Конечно, я могу пройти через массив и отсеять дубликаты, но для этого должен быть способ SQL.

Я пытался добавить в

:select => "DISTINCT(video.id)"

но возвращает только поле идентификатора вместо всей записи.

Ответы [ 2 ]

17 голосов
/ 20 января 2011

Попробуйте использовать :include вместо :joins, и вы не увидите больше повторяющихся результатов видео.

Кроме того, вы должны использовать лямбду в named_scope, иначе Time.now будет кэшироватьсяпри первом использовании вы начнете получать неправильные результаты.

named_scope :scheduled_in_future, lambda {
  { 
    :include => :events,
    :conditions => ["event.scheduled_start > ? AND event.status = ?", Time.now.to_i, 'PENDING']
  }
}
1 голос
/ 20 января 2011

Вы пробовали группировать по идентификатору видео?

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