我有2个型号,Video和ZencoderJob。每个视频has_many
zencoder_jobs和zencoder_job belongs_to
一个视频。
现在因为视频可以有多个作业(例如,当您更改视频文件时它将生成新的编码作业),有许多作业具有不同的编码状态。我使用“处理”和“完成”来了解视频何时可以通过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个新作业,旧作业的编码状态为“已完成”,而新作业则为“处理”。它不会查找作业的最后一个ID,但如果有任何作业,无论是旧的还是新的“已完成”,它都会将其显示给API。
我试过
.joins(:zencoder_jobs).where(:zencoder_jobs => { :encoded_state => "finished" }).last.uniq
但由于“最后”而引发错误。有什么想法吗?
答案 0 :(得分:0)
您可以通过使用一些SQL魔法解决此问题。在where部分中,插入selecf max(zencoder_jobs.id) from zencoder_jobs where id = zencoder_jobs_id) = zencoder_jobs_id
答案 1 :(得分:0)
您可以尝试使用加入.Ex
的附加选项Video.joins('LEFT JOIN zencoder_jobs ON zencoder_jobs.video_id = video.id AND zencoder_jobs.encoded_state = "finished" ')
这将为您提供视频集合,并且需要加入zencoder_jobs