我有2个型号,视频和ZencoderJob。每个视频has_many zencoder_jobs和zencoder_job belongs_to一个视频。
现在,因为一个视频可以有多个工作(f.e.当您更改视频文件时,它将生成一个新的编码作业),有许多作业具有不同的编码状态。我使用“正在处理”和“完成”来了解视频何时可以通过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为"finished“,新作业的encoded_state为"processing”。它不会查找作业的最后ID,但如果有任何作业,无论是旧作业还是新作业,它都会将其显示给API。
我试过了
.joins(:zencoder_jobs).where(:zencoder_jobs => { :encoded_state => "finished" }).last.uniq但是由于"last“,它抛出了一个错误。有什么想法吗?
发布于 2012-04-25 05:34:18
Yuou可以通过使用一些SQL魔法来解决这个问题。在where部分,插入selecf max(zencoder_jobs.id) from zencoder_jobs where id = zencoder_jobs_id) = zencoder_jobs_id
发布于 2012-04-25 05:52:17
您可以尝试使用join .Ex的附加选项
Video.joins('LEFT JOIN zencoder_jobs ON zencoder_jobs.video_id = video.id AND zencoder_jobs.encoded_state = "finished" ')这将使您获得视频集合和所需的加入zencoder_jobs
https://stackoverflow.com/questions/10305091
复制相似问题