我正在尝试在我的应用程序中实现审计跟踪,但由于某些要求,我无法使用任何现有的 gem 或插件。
我想将更新模型的任何正常尝试转移到自定义方法,该方法将所有更新保存在另一个单独的表(称为更新)中。
然后应用程序使用更新表来实际执行更新。
现在我已经重载了 create_or_update 来获得功能的第一部分
def create_or_update
raise ReadOnlyRecord if readonly?
result = new_record? ? create : create_updates
result != false
end
class Update < ActiveRecord::Base
belongs_to :updatable, :polymorphic => true
after_create :update_model
private
def update_model
self.updatable.update_attribute self.attribute, self.new_value #infinite loop
end
end
现在的问题是,当更新模型尝试实际执行更新时,这会导致无限循环。
我一直在查看 Rails 核心源代码,以找到绕过第一个功能的最佳位置。我希望在事务内部执行这些更新,但我不确定在活动记录堆栈中确切的开始或结束位置。我也不想开始攻击活动资源。
任何建议将不胜感激。