我有大量的CSV导入要做,文件被分成四个模型,彼此之间有关系。进口速度的问题是:
使用这种代码会更快:
model1 = Model1.find_or_create_by(accountNumber: .....) do |x|
## add fields
end
model2 = Model2.find_or_create_by(randomAttributenr2: xxx) do |x|
...
end
或者只是说
model1 = Model1.new(....)
然后验证模型中的唯一性?
可以想象,第二种方法应该更快,因为它只涉及1 db调用,要么通过或者失败,要么第一种方法执行2次调用,1执行检查,1执行创建。
我说错了吗?
答案 0 :(得分:1)
我假设您完整的第二种方法如下:
model1 = Model1.new(attrs)
model1.valid?
如果是这种情况,你实际上并没有节省太多,因为valid?
和"发现"完全相同。在find_or_create_by
中(在where子句中使用by
属性在表上运行select语句)。唯一真正的区别是valid?
将返回一个布尔值,其中find_or_create_by
返回查询的对象。