2011-01-20 76 views
6

視頻有很多活動鮮明加入Rails的

我試圖讓有計劃在未來事件的所有影片。

我這裏面已經擺在那裏:

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字段,而不是整個記錄。

回答

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'] 
    } 
} 
named_scope :scheduled_in_future, lambda { 
    { 
    :include => :events, 
    :conditions => ["event.scheduled_start > ? AND event.status = ?", Time.now.to_i, 'PENDING'] 
    } 
} 
+0

謝謝。這工作完美。也感謝蘭巴的建議。 – bmck 2011-01-20 16:53:04

1

你試過用視頻ID分組嗎?

+3

這給了我PostgreSQL(Heroku)的問題,因爲輸出中的所有字段(帶聚合函數的計算字段除外)都必須出現在GROUP BY子句中。 – montrealmike 2011-03-28 18:23:25