书面记录:每当关联模型发生变化时,都会在父级上创建一个版本?

2023-12-03

我正在开发一个 Rails 应用程序,我需要在其中显示审核跟踪Record,其中 has_manyData。我的记录上有 paper_trail 和关联的基准模型,并且它可以很好地保存它们的版本。

然而,我需要的是one每当创建记录的版本一个或多个相关数据已更改。目前,它会在每个发生变化的数据上创建版本,但仅当记录的属性发生变化时才会创建记录的版本;当关联的数据更改时它不会执行此操作。

我尝试将 touch_with_version 放入 Record 的 after_touch 回调中,如下所示:

class Record < ActiveRecord::Base
  has_many :data

  has_paper_trail

  after_touch do |record|
    puts 'touched record'
    record.touch_with_version
  end

end

and

class Datum < ActiveRecord::Base
  belongs_to :record, :touch => true

  has_paper_trail

end

after_touch 回调会触发,但不幸的是它为每个 Datum 创建一个新版本,因此当创建一条 Record 时,它已经有大约 10 个版本,每个 Datum 一个版本。

有没有办法在回调中判断版本是否已创建,这样我就不会创建多个版本?就像签入 Record 回调之一,如果 Datum 已经触发了一个版本,是否不再执行任何操作?

Thanks!


这对我有用。

class Place < ActiveRecord::Base
  has_paper_trail
  before_update :check_update

  def check_update
    return if changed_notably?

    tracking_has_many_associations = [ ... ]
    tracking_has_has_one_associations = [ ... ]

    tracking_has_many_associations.each do |a|
      send(a).each do |r|
        if r.send(:changed_notably?) || r.marked_for_destruction?
          self.touch
          return
        end
      end
    end
    tracking_has_one_associations.each do |a|
      r = send(a)
      if r.send(:changed_notably?) || r.marked_for_destruction?
        self.touch
        return
      end
    end
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

书面记录:每当关联模型发生变化时,都会在父级上创建一个版本? 的相关文章

随机推荐

  • PostgreSQL 或 MySQL 中的默认选择顺序是什么?

    我在 PostgreSQL 文档中读到 如果没有 ORDER 语句 SELECT 将以未指定的顺序返回记录 最近在一次采访中 有人问我如何按照插入的顺序 SELECT 记录 而无需 PK 或created at 或其他可用于排序的字段 采访
  • Boost Spirit x3 示例计算器(calc8、calc9)链接器错误

    我对提升精神 以及提升 非常陌生 它非常有趣的图书馆 我使用 qtcreator MinGW 5 3 我只是添加每个源文件git hub calc8进入新项目并添加一些 boost 库 但我在尝试构建时遇到以下错误 所有其他示例都工作正常
  • 如何去除Makefile中的重复项?

    有没有办法简化 Makefile 中的这种重复 duo node modules bin duo build lib background build lib page build lib popup build lib backgroun
  • 如何将文件复制到另一个路径?

    我需要将文件复制到另一个路径 将原始文件保留在原来的位置 我还希望能够重命名该文件 FileInfo 的 CopyTo 方法有效吗 看一下文件 复制 使用 File Copy 您可以将新文件名指定为目标字符串的一部分 所以像 File Co
  • 开发 gem 时如何使用“调试器”和“撬动”? (红宝石)

    我正在开发一个 gem 我的 Gemfile 如下所示 source rubygems gemspec group development test do gem pry gem debugger gem rake end 但是 我不希望人
  • 词典应用程序[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想开发一个需要英语单词词典的iPhone应用程序 你们能给我建议任何链接吗 我可以从那里获得包含合理数量的英语单词及其含义和例句的数据库 提前致谢
  • 使用 scipy.integrate.quad 执行 3D 积分

    提出问题的动机 我正在尝试在所有空间上积分函数 f x y z 我尝试使用 scipy integrate tplquad 和 scipy integrate nquad 进行积分 但这两种方法都将积分返回为 0 当积分应该是有限的时 这是
  • JSF 1.2 中 POST 参数使用错误编码

    我在 Web 应用程序 JSF 1 2 Spring 和 Tomcat 7 中遇到了字符集编码问题 并且我已经不知道要测试什么来查看哪里出了问题 每当我提交类似 的内容时 我都会得到 这意味着我的数据发布为UTF 8正在 JSF 生命周期的
  • 通过 Python 对 MySQL 数据库中的密码进行 SHA512 哈希处理

    这个问题是基于关于答案 我想知道如何通过 SHA1 哈希密码 然后通过 Python 删除 MySQL 数据库中的明文密码 如何通过 Python 对 MySQL 数据库中的密码进行哈希处理 正如文档所说 你应该使用hashlib自 pyt
  • ANDROID -- 如何在图像上显示文本?

    好吧 所以这是场景 从头开始 我想显示三颗星 我有一个我想使用的图像 居中 我想在每个星星中发布不同的单词 当然 我不希望它被硬编码 但是一旦我能得到正确的布局 剩下的就会很容易 有人可以帮忙吗 我将不胜感激 如果您只想将文本覆盖在图像之上
  • 当用作类型或异常规范时,“参见下文”是什么意思?

    Looking through the C standard current draft http isocpp org files papers N3690 pdf sec 20 8 3 is one such place and thr
  • 如何在 Windows Phone 7 中的应用程序上获取 YouTube 视频的缩略图

    我的应用程序为用户返回了 YouTube 上的一些链接视频 但我不知道如何获取视频的缩略图 当用户单击缩略图时 它将调用 WebBrowserTask 来显示此链接 你能帮我解决它吗 谢谢 您可以使用GDATA去获取有关 YouTube 视
  • C# 中可通过背压进行观察

    C rx 有没有办法处理背压 我正在尝试从分页查询的结果调用 Web api 这个 Web api 非常脆弱 我不需要超过 3 个并发调用 所以 程序应该是这样的 从数据库获取一个页面 调用 Web api 页面上每条记录最多 3 个并发调
  • 针对 C 中的多种类型进行编译时检查?

    目前我有一个宏来检查值是否是类型 define CHECK TYPE INLINE val type void type 0 0 val type 0 在某些情况下 这对于能够对宏参数进行类型检查非常有用 但是如果我要检查多种类型怎么办 例
  • CORBA 中是否有与 writeReplace 等效的东西?

    当使用标准 Java 序列化时 可以根据以下方式在流中动态替换对象 Serializable界面 创建一个Object writeReplace 序列化期间将调用的方法 我的问题很简单 Corba Java 实现中是否有与此构造等效的结构
  • `vue-cli-service build` 不会生成模板的代码

    我试图理解为什么我在 Vue 项目的屏幕上看不到任何内容 我查看了 Vue CLI 生成的项目 并在中看到了这段代码main js new Vue render h gt h App mount appmodified 但我正在使用以下代码
  • 可以让通道保持开放状态吗?

    如果我从不检查 Go 通道的状态 是否可以永远保持 Go 通道打开 从不关闭通道 会导致内存泄漏吗 下面的代码可以吗 func requestCh chan lt Request GetResponse data RequestData R
  • R:+=(加等于)和 ++(加加)等价于 c++/c#/java 等?

    R有没有概念 加等于 或 加加 像 c c 其他一样吗 不 不是 请参阅 R 语言定义 运算符
  • 无法使用有角度的材料以有角度的方式加载 POPUP

    我创建了一个示例 stackblitz 演示 在弹出组件中实现了一个简单的角度材料表 我还选择了一个空表 将选定的表行从第一个表推送到第二个空表 但问题是我无法运行 stackblitz 示例 我尝试了各种方法来解决该问题 但无法找到解决方
  • 书面记录:每当关联模型发生变化时,都会在父级上创建一个版本?

    我正在开发一个 Rails 应用程序 我需要在其中显示审核跟踪Record 其中 has manyData 我的记录上有 paper trail 和关联的基准模型 并且它可以很好地保存它们的版本 然而 我需要的是one每当创建记录的版本一个