Parallel :: UndumpableException-ActiveRecord :: RecordNotUnique:Mysql2 :: Error:在Rails上重复输入...

时间:2019-06-28 10:08:01

标签: ruby-on-rails parallel-processing

在Rails应用中使用parallel gem。

在并行块中执行wherefirst_or_create时,如果数据库具有多个唯一键将导致错误。

def method1
    Parallel.each(users.each_slice(4).to_a) do |thread_users|
      Parallel.each(thread_users, in_threads: 4) do |user|
        save_users(user_infos)
      end
    end
end

def save_users(user_infos)
    User.transaction do 
      user_infos.each do |user|
        User.where(name: user[:name]).first_or_create!(age: user[:age])
      end
    end
end

即使在ActiveRecord::Base.connection.clear_query_cache之前添加User.where,结果相同。

error: Parallel::UndumpableException - ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry 'abc-1' for key 'name-number': INSERT INTO ...

如何避免呢?

0 个答案:

没有答案