什么是更快的Rails 4:find_or_create_by与验证唯一性

时间:2014-12-15 19:17:37

标签: ruby-on-rails

我有大量的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执行创建。

我说错了吗?

1 个答案:

答案 0 :(得分:1)

我假设您完整的第二种方法如下:

model1 = Model1.new(attrs)
model1.valid?

如果是这种情况,你实际上并没有节省太多,因为valid?和"发现"完全相同。在find_or_create_by中(在where子句中使用by属性在表上运行select语句)。唯一真正的区别是valid?将返回一个布尔值,其中find_or_create_by返回查询的对象。