我需要允许权限较低的用户建议对记录进行更改,但让他们坐在某处,直到管理员批准它们为止。它应该类似于Stack Overflow允许信誉较低的用户提出对问题或答案进行编辑的方式,必须由声誉较高的人进行审核。
在papertrail术语中,我想允许用户创建记录版本而不实际将这些更改提交到记录本身 - 未来版本,而不是过去的版本。那我想让其他用户“恢复”(“预翻”?)到新版本。
这是papertrail支持的吗?或者是否有其他宝石可以做到这一点?
答案 0 :(得分:3)
我知道这个问题很老,但让我解释一下我是如何设法解决的:
假设我有一个模型Post
,两个用户:A
和B
,A
有权更新帖子,但需要B
批准在提交更改之前,B
是可以批准更新并可以更新帖子的监视器。
def revert_to(version)
raise 'not version of this model' unless self == version.item
changes = version.changeset.select{ |k, v| not SKIP_FIELDS.include?(k) }.map{ |k,v| [k.to_sym, v[1]] }.to_h
self.update_attributes(changes)
end
我从这个Stackoverflow answer获得了这个方法,但我对它进行了一些修改。
A
未授权更改而不是更新新的 Paper Trail 不更新记录本身>将创建版本,然后监视器B
可以通过将原始记录还原到该版本来接受新的更改。为此,我使用了 Paper Trail 核心paper_trail.record_update()
中的一个功能。
<强> A: 强>
p = Post.find(1)
p.title = "A new pending version"
p.paper_trail.record_update(nil)
B作为监视器:
p = Publication.find(1)
p.revert_to(p.versions.last)
B作为编辑:
p = Publication.find(1)
p.title = "p will be updated to this version immediately"
p.paper_trail.record_update(nil)
p.save
has_paper_trail
添加到Post模型,但我将其限制在创建和销毁操作上,因为正如我上面所说的,我不希望在更新后创建新版本,我希望它之前创建。 / LI>
醇>
has_paper_trail :on => [:create, :destroy]
答案 1 :(得分:1)
我现在面临同样的问题。
不,paper_trail不支持它,但也许我们可以在记录中添加approved
属性。它应该默认为false,以便在保存Record对象时创建一个新的paper_trail版本,该属性设置为false。
稍后,AdminUser可以将记录设置approved
批准为true,paper_trail将创建新的批准版本。
它不是最干净的解决方案,但应该有效。我们还可以为您的记录模型添加其他属性,例如approved_by
和approved_at
。
如果您找到了更好的解决方案,请告诉我们!