在rails中执行“find_or_create_all”的高效而优雅的方法是什么?
鉴于:
名字=[“鲍勃”,“约翰”,“杰克”,“希德”],
用户表
需要:
用户=[“#用户:0x3ae3a00”、“#用户:0x3ae3938”、“#用户:0x3ae3898”、“#用户:0x3ae37f8”]
仅当用户不存在时才创建用户。
一个中间的解决方案——[Sy-Us:0x3AE3A00,NIL,NIL,“YuxUSE:0x3AE3F8”]也会这样做,例如,在用户表中只有第一个和第四个条目存在。
一种方法是使用find_all_by_name并使用散列映射回names数组中的条目,但我想知道rails中是否有一种优雅而高效的方法。

最佳答案

ar_扩展提供了一个很好的解决方案。https://github.com/zdennis/ar-extensions
假设所讨论的表中有一列具有唯一的数据库索引,则如果唯一列上没有匹配项,则可以使用大容量插入进行插入,如果唯一列上有匹配项,则跳过或更新行。
在envycast加载大型数据集涵盖了这种情况http://envycasts.com/products/advanced-activerecord

09-26 18:12