在Sidekiq Job中使用first_or_create

时间:2016-05-06 13:52:34

标签: ruby-on-rails sidekiq

我有一个带有first_or_create的Sidekiq作业。

<?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
      android:id="@+id/add_room"
      android:icon="@drawable/ic_action_home"
      android:title="@string/menu_item_room"
      android:onClick="gotClicked"/>
  <item
      android:id="@+id/add_furniture"
      android:icon="@drawable/ic_action_armchair"
      android:title="@string/menu_item_furniture"/>
 </menu>

但是由于创建了重复的分析记录,这会导致唯一性验证失败。我理解这是因为first_or_create不是原子的。

那么这样做的正确方法是什么? 我想同时运行作业,如果分析记录已经存在,我会更新,否则插入。

1 个答案:

答案 0 :(得分:0)

调查术语“upsert”。 ActiveRecord无法在本地执行此操作,但您可以手动滚动SQL。