【问题标题】:Create paper_trail New Version without updating existing Record创建 paper_trail 新版本而不更新现有记录
【发布时间】:2019-09-30 08:27:22
【问题描述】:

我已将 paper_trail 与项目模型集成。

正常流程:-

每当模型中的项目记录更新时,就会在版本表中创建一个带有更改的新版本。

要求:-

每当更新任何项目时,我都想创建一个新的版本记录,而不是在项目模型中更新项目记录本身。有什么办法吗?

我使用的是 Rails 5.1.6.2,paper_trail (10.3.0)

【问题讨论】:

  • 只是为了澄清:您希望项目在更新时不会在数据库中更改并且在更新后仍显示旧属性?只应创建一个新版本?当数据库中的原始记录从不改变时,如何知道存在新版本?
  • @spickermann 一旦表单被提交,它将在控制器中调用更新操作。我想将所有这些更改存储在版本中,而不是更改真实的对象。然后稍后,根据版本变化,管理员将批准/拒绝更改并修改原始项目记录。

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


【解决方案1】:

我会尝试使用PaperTrail::Events::Update,尽管它不是公共 API(它可能随时更改而不会发出警告)

project.name = 'new name'
update = PaperTrail::Events::Update.new(project, ....)
PaperTrail::Version.create!(update.data)

同样,这不是公共 API,因此您将失去保修 :)

每当任何项目更新时,..

我只会将此放在我的 ProjectController#update 操作中。如果你真的需要的话,你可以使用像 before_save 这样的模型回调,以及 throw :aborthalt 回调链,但你必须解决隐式事务。

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 2012-07-25
    • 2021-03-30
    • 2011-12-10
    • 2020-06-20
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多