Rails中是否有一个DELETED表,就像在SQL Server中一样?

我需要能够在我的rails应用程序中执行相同的操作。 如您所见,在SQL Server中有一个名为DELETED的表,用于存储刚刚删除的行。 source: 如何在SQL Server中创建before delete触发器?

CREATE TRIGGER TRG_AUD_DEL ON yourTable FOR DELETE AS INSERT INTO my_audit_table (col1, col2, ...) SELECT col1, col2... FROM DELETED 

将此逻辑应用于rails,是否有这样的表/位置来调用以获取这些行,就像在rails中删除它们一样? 我知道/ after_destroy之前的回调,但是如何访问被销毁的信息呢?

依赖于特定于数据库的行为并不是ActiveRecord的意义所在。 它仅使用RDBMS作为持久存储的一种forms。 诸如此类的数据处理被委托给应用程序代码。

ActiveRecord原则声明数据库中的每一行都是应用程序中模型类的实例。 因此,在即将销毁的模型实例上调用回调。

在模型被销毁之前( before_destroy ),您的数据应该可以通过该回调中的类字段访问。 因此,您应该能够将此回调放入您希望跟踪的模型之一:

 def log_to_history DeletedStuff.create( title: "Something number #{id}", deleted_at: Time.now, content: self.to_yaml ) end before_delete :log_to_history 

这是一个有点奇怪的例子,允许在同一个表中存储几乎任何已删除的项目(甚至是不同的模型的实例),属性是使用YAML序列化的。 但我尽力公开数据结构,因此可以轻松更改以满足您的需求。

此示例需要带有字段的DeletedStuff模型

  • title: string
  • deleted_at:time
  • content:text