我有 2 个模型,Video 和 ZencoderJob。每个视频has_many
zencoder_jobs 和 zencoder_jobbelongs_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
但由于“last”而引发错误。任何想法?