Rails 5 - 使用 Audited gem 查看更改
Posted
技术标签:
【中文标题】Rails 5 - 使用 Audited gem 查看更改【英文标题】:Rails 5 - view changes using Audited gem 【发布时间】:2017-02-16 03:30:32 【问题描述】:在我为学习 RoR 而构建的应用中,我想添加更改跟踪并为此使用 Audited gem。虽然很清楚如何将其添加到我的模型中,但我如何才能看到更改?
我想在每个页面上为打开审核日志视图的不同对象/类/模型添加一个链接/按钮。即列出按更改日期/时间排序的所有更改(日期/时间、字段、旧值、新值、按用户)。
找不到任何文档。感谢您对入门的所有帮助。
【问题讨论】:
【参考方案1】:感谢@dnsh,我更改了他的代码并添加了其他内容:
%table.table.table-hover
%thead
%tr
%th Type
%th When
%th Who
%th What Changed
- model.audits.order(:created_at).each do |audit|
%tr
%td= audit.action
%td= audit.created_at
%td= audit.user.name
%td
- audit.audited_changes.each do |k, v|
%b= k.titleize
- if v.class == Array # if updated
from
%b= "'#v[0]'"
to
%b= "'#v[1]'"
%br
- else # if created
= v
【讨论】:
我不知道为什么这个答案被赞成,但它目前不起作用,因为审计方法会抛出一个未定义的错误消息***.com/questions/27353017/…【参考方案2】:几个月前我在使用 Papertrail Gem 时需要精确的功能。我修改了我的代码以适用于经过审核的 gem。我希望下面的haml代码会给你一个很好的开始。
%table.table.table-hover
%thead
%tr
%th Type
%th When
%th Who
%th What Changed
- model.audits.order(:created_at).each do |audit|
%tr
%td= audit.action
%td= audit.created_at
%td= audit.user.name
%td
- audit.audited_changes.each do |k, v|
%b= k.titleize
from
%b= "'#v[0]'"
to
%b= "'#v[1]'"
%br
代码是不言自明的如果你通过https://github.com/collectiveidea/audited
audited_changes 的解释:
对于 audited_changes,我们有类似 audit.audited_changes # => "name"=>["Steve", "Ryan"]
的哈希值。这意味着您有以字符串为键的散列和具有两个值的数组。第一个值是更新前,第二个是更新后。
【讨论】:
Tx Dinesh - 本周初会看一下。然后告诉你。 注意:audited_changes 值可以是数组或字符串! - audit.audited_changes.each 做|k, v| %b= k.titlesize - 如果 v.class== 数组从 = "'#v[0]'" 到 =# "'#v[1]'" - else = "'#v '" %br 为什么我得到undefined method 'audits'
?我正在运行 Ruby 2.5.1、Rails 5.2.0 和 Audited 4.8.0。我复制了代码,然后用我的模式名称/类替换 model
。
您遇到的问题是如何解决的? @DavidAngulo以上是关于Rails 5 - 使用 Audited gem 查看更改的主要内容,如果未能解决你的问题,请参考以下文章
ActionController::InvalidAuthenticityToken Rails 5 / 设计 / 审核 / PaperTrail gem