SQL语句与活动记录

时间:2017-06-29 03:02:07

标签: ruby-on-rails

在有关事务的rails指南中,它说sql语句如下所示:

ActiveRecord::Base.transaction do
  david.withdrawal(100)
  mary.deposit(100)
end

但这不是这个活跃的记录吗?有什么区别?

2 个答案:

答案 0 :(得分:1)

我想在这里问david.withdrawal(100)。这不是active_record也不是sql语句。它只是声明,以帮助用户了解在rails中使用事务。

您可以在事务块内使用活动记录。您也可以只使用rails方式编写sql语句。

使用事务,如果你有一些依赖的sql语句。如果任何一个都无法保存在DB中,那么其他语句也应该回滚。在这种情况下,我们使用了交易。

答案 1 :(得分:0)

您在ActiveRecord::Base.transaction块中执行Ruby或Active Record方法或SQL的方式与在一个块外部执行方式相同。唯一的区别是,如果块中发生的任何数据库操作失败,则块中的所有其他数据库操作也将回滚。

Active Record是围绕SQL的Ruby包装器。要查看Active Record方法如何转换为SQL,请查看Active Record docs

中的示例

在您发布的示例中:

ActiveRecord::Base.transaction do
  david.withdrawal(100)
  mary.deposit(100)
end
可以假设

:withdrawal:deposit是最终进行SQL调用的Active Record方法。取款依赖于存款,因此我们将它们包装在一个交易中,因此如果其中一个失败,另一个也将被回滚(取消)。