SQL 语句与活动记录



在关于事务的rails指南中,它说sql语句是这样组合在一起的:

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

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

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

您可以在事务块中使用活动记录。你也可以写sql语句,但只能用rails的方式。

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

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

Active Record 是 SQL 的 Ruby 包装器。若要了解活动记录方法如何转换为 SQL,请查看活动记录文档中的示例。

在您发布的示例中:

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

可以假定:withdrawal:deposit是最终进行 SQL 调用的活动记录方法。提款依赖于存款,因此我们将它们包装在交易中,因此如果其中一个失败,另一个也会回滚(取消(。

最新更新