PaperTrail:当我们跟踪用户 * 和 * AdminUsers 的更改时如何区分 whodunnit?

PaperTrail: how to differentiate whodunnit when we track changes by both Users *and* AdminUsers?

我们模型的 whodunnit 值是一个字符串 - 例如 "22"User 中的 id22

问题是我们同时使用 UserAdminUser 模型来跟踪 whodunnit。因此,无法判断更改是由用户还是由 AdminUser 进行的:

def user_for_paper_trail
  current_user || current_admin_user
end

我对 PaperTrail 有点陌生,但我通过他们的文档工作,无法提出任何解决方案。这可能是一个奇怪的请求,但我喜欢像任意字段这样的东西,如果有意义的话,我们可以为它添加一个值作为 whodunnit type。或者根据控制器只跟踪某些更改的方法(在这种情况下会起作用,因为我只跟踪通过 AdminPanel 所做的更改)。

感谢任何建议或指导。

PaperTrail 正在存储 id 由于以下两个原因之一:

  • 正在使用 PaperTrail 提供的默认值 before_action 分配 Whodunnit,并对 your user_for_paper_trail 方法返回的值调用 .id

  • 您的应用根据 user_for_paper_trail 方法的结果手动调用 .id

由于 UserAdminUser id 不是普遍唯一的,您应该存储不同的值。

whodunnit 值可以是您决定的任何字符串。如果您有一个可用于区分 UsersAdminUsers 的唯一标识符,您应该存储该值。

我认为以下选项之一可以解决您的问题:

  1. 如果 email 在两个用户模型之间是唯一的,则存储电子邮件而不是 id。

  2. 如果 email 不是唯一的,您可以存储一个同时显示用户模型类型和 ID 的字符串(例如 'User: 1' and/or 'AdminUser: 1'),然后当你去获取 whodunnit 值时,你可以解析用户模型和 id 的字符串,然后适当地使用该信息。

  3. 通读 PaperTrail details how to find out who was responsible for a change and come up with a similar custom solution (or, another option).