簡體   English   中英

如何在Rails中一次創建多個模型實例

[英]How to create multiple model instances at once in Rails

我有這樣的方法:

codes.each do |code|
  company = Company.find_or_create_by(code: code)
  company.foo = some_value
  company.bar = some_value2
  company.save
end

為了使其更快,我想用update_all編寫它

codes.each do |code|
  Company.find_or_create_by(code: code)
  Company.where(code: code).update_all(foo: some_value, bar: some_value2)
end

但是find_or_create_by每次都會執行SQL命令。 有沒有辦法一次創建多個模型實例?

我想寫像Company.create_all_if_not_exist(code: codes)

我看到一個更好的方法:

existing_companies = Company.where(code: codes)
existing_codes = existing_companies.pluck(:code) # +1 request
non_existing_codes = codes - existing_codes

attrs = {foo: some_value, bar: some_value2}

existing_companies.update_all(attrs) # +1 request

# + (codes - existing_codes) requests
non_existing_codes.each do |code|
  Company.create({code: code}.merge(attrs))
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM