独特的加入Rails

时间:2011-01-20 16:24:59

标签: sql ruby-on-rails ruby activerecord

视频有很多活动

我正在努力获取将来安排活动的所有视频。

我已经有了这个:

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

这样可行,但如果同一个视频将来有多个事件,它会给我重复的视频记录。当然,我可以通过数组并清除重复项,但必须有一种SQL方法来完成它。

我尝试添加

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

但它只返回ID字段而不是整个记录。

2 个答案:

答案 0 :(得分:17)

尝试使用:include代替:joins,您不应再看到重复的视频结果了。

此外,您应该在named_scope中使用lambda,否则Time.now将在您第一次使用时被缓存,并且您将开始获得不正确的结果。

named_scope :scheduled_in_future, lambda {
  { 
    :include => :events,
    :conditions => ["event.scheduled_start > ? AND event.status = ?", Time.now.to_i, 'PENDING']
  }
}

答案 1 :(得分:1)

您是否尝试按视频ID进行分组?