gpt4 book ai didi

ruby-on-rails - 创建新用户时如何为 paper_trail 设置 whodunnit?

转载 作者:行者123 更新时间:2023-12-04 05:59:27 24 4
gpt4 key购买 nike

paper_trail gem 跟踪版本,并且做得很好。但是,我一直注意到一个边缘情况。对于大多数对象,如果您已登录,应用程序 Controller 会设置 whodunnit,然后在该 session 期间创建的所有对象都有一个版本,根据谁登录来记录“whodunnit”。

有趣的情况是没有人登录,因为新用户正在注册。用户是用“nil” whodunnit 创建的,这是错误的,因为实际上用户是由他们自己创建的。

当然,在保存用户记录之前,whodunnit 是无法知道用户的id的。我知道这个。

但是,这会在以后产生冲突,因为各种批处理作业也会修改用户记录,并且不在 Web session 中,也会创建具有 nil whodunnit 记录的版本。

现在我不知道是谁创建了用户——一些批量导入过程,或者用户。

我正在考虑各种解决方案,比如可能在 Papertrail::Versions 表周围翻找该对象并修复 whodunnit,但这似乎很不干净。

有什么建议吗?

最佳答案

您可以在 Controller 上的 create 操作中强制 whodunnit。

before_filter :only => [:create] do
PaperTrail.whodunnit = "Public User"
end

如果您坚持在版本表中包含用户 ID,您可以这样做:
ActiveRecord::Base.transaction do
@user.save!
@user.versions.last.update_attributes!(:whodunnit => @user.id)
end

关于ruby-on-rails - 创建新用户时如何为 paper_trail 设置 whodunnit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com