Video と ZencoderJob の 2 つのモデルがあります。各ビデオhas_many
zencoder_jobs と zencoder_job belongs_to
1 つのビデオ。
ビデオには複数のジョブを含めることができるため (ビデオ ファイルを変更すると、新しいエンコーディング ジョブが生成されます)、さまざまなエンコーディング状態のジョブが多数存在します。「処理中」と「終了済み」を使用して、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
問題は、1 つのビデオに 3 つのジョブ (古いジョブが 2 つ、新しいジョブが 1 つ) がある場合、古いジョブのencoded_state が「終了」で、新しいジョブの「処理中」であるということです。ジョブの最終IDを探すのではなく、新旧問わず「終了」のジョブがあればAPIに公開します。
私は試した
.joins(:zencoder_jobs).where(:zencoder_jobs => { :encoded_state => "finished" }).last.uniq
しかし、「最後」のためにエラーがスローされます。何か案が?