2012-04-24 39 views
0

我有2種型號,視頻和ZencoderJob。每個視頻has_many zencoder_jobs和zencoder_job belongs_to一個視頻。Rails的ActiveRecord的與最後一個ID選擇項目的連接只

現在因爲一個視頻可以有多個作業指標(如當您更改視頻文件就會產生一個新的編碼工作),有很多工作機會與不同的編碼狀態。我使用「處理」和「完成」來了解何時可以通過API顯示視頻。

這是我從video.rb實際查詢

def self.finished_and_active(limit, offset) 
    limit(limit || 30) 
    .offset(offset.to_i || 0) 
    .order("id DESC") 
    .where(:active => true) 
    .joins(:zencoder_jobs).where(:zencoder_jobs => { :encoded_state => "finished" }) 
    .uniq 
end 

的問題是,如果有3個職位的一個視頻,2歲和1個新的,舊的作業具有的「已完成」一encoded_state和新的有「處理」。它不找工作的最後一個ID,但如果有任何的工作,如果新的或舊有「成品」不管,它揭示它的API。

我試圖

.joins(:zencoder_jobs).where(:zencoder_jobs => { :encoded_state => "finished" }).last.uniq 

但它拋出,因爲 「最後」 一個錯誤。任何想法?

+0

我不知道是什麼問題你問。 'last'將只返回一個對象,而不是一個集合,所以調用'uniq'會拋出一個錯誤,但我不知道你實際要做什麼。 – 2012-04-24 20:12:29

+0

即使最新作業的encoded_state處於「正在處理」狀態,此時視頻也會顯示,因爲存在編碼狀態「已完成」的較舊作業。如果它的encodede_state是「完成」與否,並且忽略較舊的作業 – 2012-04-24 20:23:19

+0

如果最新作業「完成」但在此之前的作業仍處於「正在處理」狀態,該怎麼辦? – 2012-04-24 20:25:54

回答

0

昱歐可以使用一些魔法的SQL解決這個問題。在部分地方,插入selecf max(zencoder_jobs.id) from zencoder_jobs where id = zencoder_jobs_id) = zencoder_jobs_id

0

你可以嘗試使用另外的選擇與加盟.EX

Video.joins('LEFT JOIN zencoder_jobs ON zencoder_jobs.video_id = video.id AND zencoder_jobs.encoded_state = "finished" ') 

這將讓你的視頻採集和需要加入zencoder_jobs

相關問題