PaperTrail:当我们跟踪用户 * 和 * AdminUsers 的更改时如何区分 whodunnit?
PaperTrail: how to differentiate whodunnit when we track changes by both Users *and* AdminUsers?
我们模型的 whodunnit
值是一个字符串 - 例如 "22"
与 User
中的 id
为 22
。
问题是我们同时使用 User
和 AdminUser
模型来跟踪 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
。
由于 User
或 AdminUser
id
不是普遍唯一的,您应该存储不同的值。
whodunnit
值可以是您决定的任何字符串。如果您有一个可用于区分 Users
和 AdminUsers
的唯一标识符,您应该存储该值。
我认为以下选项之一可以解决您的问题:
如果 email
在两个用户模型之间是唯一的,则存储电子邮件而不是 id。
如果 email
不是唯一的,您可以存储一个同时显示用户模型类型和 ID 的字符串(例如 'User: 1'
and/or 'AdminUser: 1'
),然后当你去获取 whodunnit
值时,你可以解析用户模型和 id 的字符串,然后适当地使用该信息。
通读 PaperTrail details how to find out who was responsible for a change and come up with a similar custom solution (or, another option).
我们模型的 whodunnit
值是一个字符串 - 例如 "22"
与 User
中的 id
为 22
。
问题是我们同时使用 User
和 AdminUser
模型来跟踪 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
。
由于 User
或 AdminUser
id
不是普遍唯一的,您应该存储不同的值。
whodunnit
值可以是您决定的任何字符串。如果您有一个可用于区分 Users
和 AdminUsers
的唯一标识符,您应该存储该值。
我认为以下选项之一可以解决您的问题:
如果
email
在两个用户模型之间是唯一的,则存储电子邮件而不是 id。如果
email
不是唯一的,您可以存储一个同时显示用户模型类型和 ID 的字符串(例如'User: 1'
and/or'AdminUser: 1'
),然后当你去获取whodunnit
值时,你可以解析用户模型和 id 的字符串,然后适当地使用该信息。通读 PaperTrail details how to find out who was responsible for a change and come up with a similar custom solution (or, another option).