【发布时间】:2012-02-23 16:14:42
【问题描述】:
在测试acts_as_audited 时,我发现(也如here 所述):with_associations 标志不会为 HABTM 关系生成审计表条目。
例如:
User < ActiveRecord::Base
has_and_belongs_to_many: :groups
acts_as_audited, with_associations: groups
Group < ActiveRecord::Base
has_and_belongs_to_many: :users
acts_as_audited, with_associations: users
(以及经过测试的变体,即有/无 with_associations)
在源代码中,可以看到所有acts_as_audited 所做的只是将诸如 before_update 和 after_create 之类的回调添加到已审核的表中。显然这些没有添加到连接表中。
我尝试制作这样的模型:
GroupsUsers < ActiveRecord::Base
acts_as_audited
after_save: :test
def test
logger.debug "test"
end
但没有看到对用户或组的 CRUD 操作的审计表有任何添加。我可以在日志中看到作用于连接表的 SQL 语句,因此这表明连接表在内部以绕过正常回调的方式进行了更改。
这是真的吗?关于让acts_as_audited 注意到连接表或记录HABTM 关联的任何建议?
【问题讨论】:
-
这更像是 Rails 问题而不是acts_as_audited 问题——Rails 不会对某些HABTM 生成的方法运行回调,因此acts_as_audited 不会捕捉到发生的情况。您如何更新关联?
-
@MatthewLehner,这是我想知道的事情之一。这是否意味着连接表中的 CRUD 操作在某种程度上与数据表有根本的不同?为什么我不能为连接表创建一个骨架模型类并使用回调以通常的方式跟踪它的 CRUD 操作?例如,这篇文章表明这是可能的:robots.thoughtbot.com/post/159808010/…
标签: ruby-on-rails callback has-and-belongs-to-many acts-as-audited