以下哪个操作在 Rails 3.2 中更快
Fact.delete
Fact.new(:balance => 233, :profit_date => Date.now, :comments => "whatever")
或者
Fact.update(:balance => 233, :profit_date => Date.now, :comments => "whatever")
以下哪个操作在 Rails 3.2 中更快
Fact.delete
Fact.new(:balance => 233, :profit_date => Date.now, :comments => "whatever")
或者
Fact.update(:balance => 233, :profit_date => Date.now, :comments => "whatever")
如果它们有效,您包含的两个代码片段会做不同的事情:
第一段代码不起作用,因为您正在调用.new
on fact
,它是类的实例,而不是类本身。它可能没有.new
方法,如果有,它可能不会做你想做的事。要创建一个新的 Fact 对象,您可以使用Fact.new
. 但即使你这样做了,ActiveRecord 的.new
方法也不会保存记录。因此,fact.delete; Fact.new
只删除记录,不保存记录。如果Fact.create()
要创建和保存记录(或fact = Fact.new()
后跟f.save
),请使用。
第二件也行不通,因为你想要的方法是 named .update_attributes
,而不是.update
。你会得到一个错误。
现在,关于哪个更快的实际问题,删除一条记录然后重新创建它或只是更新它:找到两件事中哪一个更快的最佳方法是自己对其进行基准测试。这是因为答案将取决于您的数据库是如何设置的,它有多少记录,以及任何数量的其他因素。在我看来,DELETE
随后的INSERT
速度会比 慢UPDATE
,但这与实际测试它不同,而且我所做的任何测试都将基于我的数据库设置而不是你的。
除非您打算多次这样做,否则这两种方法都可能“足够快”。鉴于此,.update_attributes
无论它的相对性能如何,我都会使用它,因为这样代码会更有意义并且更具可读性。如果您多次这样做,您将通过重构以某种方式进行批量更新,从而获得更大的性能提升。