gpt4 book ai didi

ruby-on-rails - 我可以使用 papertrail 存储 "pending-approval"更改吗?

转载 作者:行者123 更新时间:2023-12-04 18:42:41 24 4
gpt4 key购买 nike

我需要允许权限较低的用户提出对记录的更改,但让他们坐在某个地方,直到管理员批准他们。它应该类似于 Stack Overflow 允许声誉较低的用户对必须由声誉较高的人审查的问题或答案提出编辑建议的方式。

用纸迹术语来说,我希望允许用户创建记录的版本,而无需实际将这些更改提交给记录本身—— future 版本,而不是过去的版本。然后我想允许另一个用户“恢复”(“prevert”?)到新版本。

这是papertrail支持的东西吗?或者有没有其他 gem 可以做到这一点?

最佳答案

我知道这个问题很老了,但让我解释一下我是如何解决它的:

假设我有一个模型 Post ,两个用户:AB ,那 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 更新记录本身未授权提交更改而不是更新新 纸迹 将创建版本,然后监视器 B可以通过将原始记录恢复到该版本来接受新的更改。

  • 为此,我使用了 中的函数纸迹 核心 paper_trail.record_update() .

    答:

    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发布模型,但我将其限制在创建和销毁操作上,因为正如我上面所说,我不希望在更新后创建新版本,我希望在之前创建它。

  • has_paper_trail :on => [:create, :destroy]

    关于ruby-on-rails - 我可以使用 papertrail 存储 "pending-approval"更改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22000654/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com