我有一个名为Client的模型,有3个属性:名称,电话和电子邮件。 在开始时,我有一个客户端,其中包含一些值: Mark,+ 54261334455和fake@client.com 。然后我将这些值更改为: Peter,+ 52261444444,another@mail.com ,但我需要保留旧值。我怎么能这样做?
我的选择:
更好的想法来做到这一点?
答案 0 :(得分:1)
选项4:创建与ClientHistory
相同的Client
模型,并添加引用相应client_id
的{{1}}列。然后,Client
回调可以执行以下操作:
before_save
当然,before_save :track_history
def track_history
return if(new_record? || !changed?)
old = Hash[attribute_names.map { |name| [name == 'id' ? 'client_id' : name, self.send("#{name}_was")] }]
ClientHistory.create!(old)
end
可以在new_record? || !changed?
电话上推送到:if
选项。您可能希望过滤before_save
以留下更多的东西,您可能只想跟踪已更改的内容,这些都是非常简单的修改(但要小心您如何跟踪 - {{1来自 - attribute_names
过渡)。
答案 1 :(得分:1)
在您的情况下可能会有些过分,但有一些很棒的ActiveRecord版本控制工具。 它可以让您跟踪对特定记录所做的更改,甚至可以将值重置为以前的版本。
我所知道的最佳解决方案之一是paper_trail