新手问题 ActiveRecord 优化问题

NeptuneG · August 24, 2020 · Last by NeptuneG replied at August 27, 2020 · 1441 hits

Tagging 有一个 [:tag_id, :taggable_id, :taggable_type] 的 unique 制约,下面的代码有什么办法可以优化一下么?

def merge_taggings(remained_tag_id, delete_tag_ids)
  Tagging.where(tag_id: delete_tag_ids).each do |tagging|
    if Tagging.exists?(tagging.taggable_id, tagging.taggable_type, tag_id: remained_tag_id)
      tagging.delete
    else
      tagging.update(tag_id: remained_tag_id)
    end
  end
end

先 delete_all 再 update_all 呢

Reply to flowerwrong

先 delete_all 就东西可以 update_all 了吧

换个路子试试,直接 update,然后抓 unique 异常,在异常处理中作 delete。性能估计取决于这样的异常多不多了

可以加一个字段,比如 should_delete

然后对Tagging.where(tag_id: delete_tag_ids)做批量更新

冲突时update should_delete = 1,然后再Tagging.where(should_delete:1).delete

这里又不会是瓶颈 优化个啥

Reply to hooopo

是的!杠回去了!

You need to Sign in before reply, if you don't have an account, please Sign up first.