0

Video と ZencoderJob の 2 つのモデルがあります。各ビデオhas_manyzencoder_jobs と zencoder_job belongs_to1 つのビデオ。

ビデオには複数のジョブを含めることができるため (ビデオ ファイルを変更すると、新しいエンコーディング ジョブが生成されます)、さまざまなエンコーディング状態のジョブが多数存在します。「処理中」と「終了済み」を使用して、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

しかし、「最後」のためにエラーがスローされます。何か案が?

4

2 に答える 2

0

join.Exで追加オプションを使用してみることができます

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

これにより、ビデオのコレクションと必要な参加済みzencoder_jobsが取得されます

于 2012-04-24T21:52:16.510 に答える
0

Yuou は、SQL マジックを使用してこの問題を解決できます。where部分に、挿入しますselecf max(zencoder_jobs.id) from zencoder_jobs where id = zencoder_jobs_id) = zencoder_jobs_id

于 2012-04-24T21:34:17.793 に答える