Rails6의 표준 기능을 사용한 bulk import
하지만 Rails6에서도 Bulk import 및 Bulk Upsert를 사용할 수 있습니다.
테스트용 repository
다음은 insert.all 및 upsertall에서 User의 import 및 upsert를 테스트할 수 있습니다.
rails db:migrate
rails db:seed
Bulk import 예
ActiveRecord의attirbutes의Hash의Aray를 매개 변수
insert_all!
로 특수 method를 호출합니다.insert_all
insert_all!
User model은 이런 느낌입니다.
# frozen_string_literal: true
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# email :string not null
# name :string not null
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_users_on_email (email) UNIQUE
#
class User < ApplicationRecord
has_many :posts
has_many :comments
end
Bulk import 10개의 Userrequire 'faker'
### Example of bulk insert
def user_params
time = Faker::Time.backward
{
name: Faker::Name.name,
email: Faker::Internet.email,
created_at: time,
updated_at: time
}
end
User.insert_all!(10.times.map { user_params })
pp User.count
#=> 10
Bulk Upsert 예
할 수 있어.Upsert를 수행하려면 Uniq 제한이 있는 열이 필요합니다.
이번 예에서 이메일은 유닉스의 제약을 받았다.
upsert_all
이메일이 중복될 때는 업데이트이고, 이메일이 중복되지 않을 때는 insert입니다.
### Example of Upsert
user = User.first
list = [
{
email: user.email,
name: 'hoge',
created_at: user.created_at,
updated_at: Time.now
},
{
email: '[email protected]',
name: 'fuga',
created_at: Time.now,
updated_at: Time.now,
}
]
User.upsert_all(list, unique_by: :email)
pp User.count
#=> 11
activerecord-imprt보다 편리합니다!그렇게 말하지는 않지만 많은 용도로 충분합니다. 프로젝트에 따라 activerecord-import가 없으면 표준 기능만 bulk import가 가능하다는 것을 기억하는 것이 편리합니다.
Reference
이 문제에 관하여(Rails6의 표준 기능을 사용한 bulk import), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/junara/articles/09f12c9c021b8f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)