activerecord-import가 역시 신이었던 이야기
7196 단어 루비RailsActiveRecord
개요 & 부탁
이번에 gem activerecord-import 를 사용해 감동한 이야기를 적는다.
도입 부분은
bundle insatll
할 뿐이므로 생략한다.아시는 분은 스루 & 틀렸다면 지적 부탁드립니다
activerecord-import 란 무엇인가
ActiveRecord를 사용하여 데이터를 대량 삽입하는 라이브러리.
each로 빙빙 돌려 1건씩 레코드 추가 갱신은 부하가 걸리기 때문에 벌크 인서트/벌크 업데이트를 사용하자.
여기가 좋다.
on_duplicate_key_update:
를 설정하면 새로운 추가 또는 업데이트 로직을 의식하지 않고 구현할 수 있습니다.착각했던 것
target_users
를 작성할 때, 신규 작성과 갱신으로 로직을 바꿔야 하는지 생각하고 있었다 (알기 어렵지만 before 참조) before(동작은 미확인)
hoge.rb
target_users = []
# 一括で登録したいユーザー情報
user_lists = [{key: 'hoge', name: 'ほげ'}, {key: 'fuga', name: 'ふが'}, {key: 'piyo', name: 'ぴよ'}]
users = User.all
# 新規作成
if users.blank?
user_lists.each do |user_list|
target_users << User.new(
key: user_list['key'],
name: user_list['name']
)
end
# 更新の場合は
else
user_lists.each do |user_list|
users.each do |user|
next unless user.key == user_list.key
user.name = user_list.name
target_users << user
end
end
end
User.import target_users, on_duplicate_key_update:[:name]
A "A"A "A"A"A"A"A"A"A"긴 긴 긴
after
hoge.rb
target_users = []
user_lists = [{key: 'hoge', name: 'ほげ'}, {key: 'fuga', name: 'ふが'}, {key: 'piyo', name: 'ぴよ'}]
user_lists.each do |user_list|
target_users << User.new(
key: user_list['key'],
name: user_list['name']
)
end
User.import target_users, on_duplicate_key_update:[:name]
실은 이것만으로 신규 추가도 갱신도 좋게 해 주었다
나는 키모이키모이라고 생각했던 코드가 전부 없어져서 감동했다
!
on_duplicate_key_update:
는 MySQL, PostgreSQL (9.5 이상), SQLite (3.24.0 이후)에서 설정이 지원되지만 PostgreSQL은 미묘하게 작성하는 방법이 다르므로주의가 필요합니다.마지막으로
Rails6에서 insert_all, insert_all!, upsert_all이 추가되었으므로 activerecord-import가 더 이상 사용되지 않습니다 ...
잡잡이지만 끝.
Reference
이 문제에 관하여(activerecord-import가 역시 신이었던 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuderingo/items/d9059b93b7c4440a4832텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)