以下代码,如果找不到新行,则正确插入新行people
。如果找到people
,我希望它更新现有行以及import_id
但更新不起作用。所以基本上如果新导入包含相同的数据people
我只想更新import_id
.people
有name age
.
Person.transaction do
people.flatten.each do |people|
Person.create_with({ import_id: import.id, **people }).find_or_create_by(**people)
end
end
要重申要求,如果people
中的项目与Person
匹配name
和age
,请更新该人员的import_id
。如果people
中的该项与name
和age
的Person
不匹配,请创建一个新Person
并设置import_id
。
这应该可以满足您的需求。
Person.transaction do
people = [{ name: 'Tom', age: 20 }, { name: 'Jerry', age: 20 }]
people.flatten.each do |person|
Person.find_or_create_by(name: person[:name], age: person[:age])
.update_attributes(import_id: import.id)
end
end
按所需属性查找或创建人员,然后更新新记录或现有记录上的import_id
。
find_or_create_by文档