将更改记录到数据库

发布于 2024-12-13 21:02:16 字数 170 浏览 2 评论 0原文

我有大约 15 个或多或少复杂的模型。我想跟踪其中的变化。最简单的方法是什么?保存后/更新后触发器?

性能很重要,但如果有一种复杂度低但性能下降的方法,我会这样做。

顺便说一句:我不想使用存储过程。 (尽管我可能会这样做,如果有一种非常简单的方法的话......)

谢谢,菲利普

I have around 15 more or less complex models. Of those I would like to track the changes. What's the simplest way? After-save/-update triggers?

Performance is important but if there is a way with low complexity but decreasing performance, I'll do it.

By the way: I do not want to use stored procedures. (Though I might, if there is a really simple way to do so...)

Thanks, Philip

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

早乙女 2024-12-20 21:02:16

verstal_versions ,它似乎可以做你想做的事情。

它为您指定的所有模型添加版本控制。例如,请参见:

class User < ActiveRecord::Base
  versioned

  validates_presence_of :name
end

然后您可以像这样使用模型的版本:

>> u = User.create(:name => "Steve Richert")
=> #<User first_name: "Steve", last_name: "Richert">
>> u.version
=> 1
>> u.update_attribute(:name, "Stephen Richert")
=> true
>> u.name
=> "Stephen Richert"
>> u.version
=> 2
>> u.revert_to(10.seconds.ago)
=> 1
>> u.name
=> "Steve Richert"

There is verstal_versions, which seems to do what you want to do.

It adds versionning over all the models you specify. See, for example :

class User < ActiveRecord::Base
  versioned

  validates_presence_of :name
end

Then you can use your model's versions like this :

>> u = User.create(:name => "Steve Richert")
=> #<User first_name: "Steve", last_name: "Richert">
>> u.version
=> 1
>> u.update_attribute(:name, "Stephen Richert")
=> true
>> u.name
=> "Stephen Richert"
>> u.version
=> 2
>> u.revert_to(10.seconds.ago)
=> 1
>> u.name
=> "Steve Richert"
甩你一脸翔 2024-12-20 21:02:16

您可能还想查看 ActiveRecord 提供的开箱即用的脏对象。这使您能够在对象保存过程中对其进行处理,以便您可以将更改记录到单独的表中。

You might also want to look at Dirty objects provided by ActiveRecord out of the box. This gives you the ability to work with objects while they're in the process of being saved so that you can log the changes to a separate table.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文