我们模型的whodunnit
值是一个字符串 - 例如"22"
User
中id
为22
的字符串。
问题是我们同时使用User
和AdminUser
模型来跟踪whodunnit。因此,无法判断更改是由用户还是由管理员用户进行的:
def user_for_paper_trail
current_user || current_admin_user
end
我对 PaperTrail 有点陌生,但通过他们的文档工作,无法提出任何解决方案。这可能是一个奇怪的请求,但我希望有一个像任意字段这样的东西,我们可以添加一个值作为 whodunnittype
,如果这有意义的话。或者一种仅根据控制器跟踪某些更改的方法(在这种情况下有效,因为我只会跟踪通过 AdminPanel 所做的更改)。
感谢您的任何建议或指导。
PaperTrail 存储id
的原因如下:
- Whodunnit 是使用 PaperTrail 提供的默认before_action分配的,并且正在对
your user_for_paper_trail
方法返回的值调用.id
。
或
- 应用根据
user_for_paper_trail
方法的结果手动调用.id
。
由于User
或AdminUser
id
不是普遍唯一的,因此应存储不同的值。
whodunnit
值可以是你决定的任何字符串。 如果您有可用于区分Users
和AdminUsers
的唯一标识符,则应存储该值。
我认为这些选项之一可能会解决您的问题:
-
如果
email
在两个用户模型之间是唯一的,请存储电子邮件而不是 ID。 -
如果
email
不是唯一的,您可以存储一个字符串,该字符串同时显示用户模型类型和 id(例如'User: 1'
和/或'AdminUser: 1'
),然后当你去获取whodunnit
值时,你可以解析用户模型和ID的字符串,然后根据需要使用该信息。 -
通读 PaperTrail 如何详细说明如何找出谁负责更改并提出类似的自定义解决方案(或另一种选择)。