Использование first_or_create в задании Sidekiq

У меня есть задание Sidekiq с first_or_create.

 class JobWithFirstOrCreate
    analysis = Analysis.where(standard_id: standard_id).first_or_create
    analysis.save!
 end

Но это приводит к сбою проверки уникальности из-за создания повторяющихся записей анализа. Я понимаю это потому, что first_or_create не является атомарным.

Так как же правильно это сделать?
Я хочу одновременно выполнять задания, в которых я обновляю, если запись анализа уже присутствует, иначе insert.

1 ответ

  1. Рассмотрим термин «upsert». ActiveRecord не может сделать это изначально, но вы можете свернуть SQL вручную.