PaperTrail:当我们跟踪用户*和*管理员的变化时,如何区分whodunnit?

时间:2017-03-20 19:58:22

标签: ruby-on-rails paper-trail-gem

我们模型的whodunnit值是一个字符串 - 例如"22"User id 22一样。

问题是我们使用UserAdminUser模型来跟踪whodunnit。因此,无法判断用户是否进行了更改,或者是由管理员进行更改:

def user_for_paper_trail
  current_user || current_admin_user
end

我对PaperTrail有点新鲜,但是我的工作方式完成了他们的文档并无法提出任何解决方案。这可能是一个奇怪的请求,但我喜欢像任意字段这样的东西,我们可以为whodunnit type添加一个值,如果这是有道理的。或者只是根据控制器跟踪某些更改的方法(在这种情况下可以使用,因为我只跟踪通过AdminPanel进行的更改)。

感谢您的任何建议或指导。

1 个答案:

答案 0 :(得分:1)

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

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

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

由于UserAdminUser id并非普遍唯一,因此您应该存储不同的值。

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

我认为其中一个选项可以解决您的问题:

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

  2. 如果email不唯一,您可以存储一个显示用户模型类型和ID的字符串(例如'User: 1'和/或'AdminUser: 1'),然后你去获取whodunnit值,你可以解析用户模型和id的字符串,然后根据需要使用这些信息。

  3. 了解PaperTrail details how to find out who was responsible for a change的方式并提出类似的自定义解决方案(或another option)。