Tag: paper trail gem

纸张跟踪手动版本控制无法按预期工作

我正在使用paper_trail gem。 我的用例涉及在我明确想要而不是像on: [:update]类的回调时创建版本。 我这样做是在我的my_model.rb添加on: []并在我的模型实例上使用paper_trail.touch_with_version 。 问题是每当我第一次使用nil属性保存版本时这样做。 很奇怪,下次调用paper_trail.touch_with_version ,它会正确地保存它,并正确初始化所有属性。 来自rails控制台的示例日志: document = Document.first # document.paper_trail.touch_with_version document.versions.last.reify.name => nil document.paper_trail.touch_with_version document.versions.last.reify.name => “Sample document” 真正奇怪的是,如果我尝试使用document.paper_trail.touch_with_version后跟document.versions.last.reify.name我正确获取document.versions.last.reify.name名称,但是如果我退出控制台并在第一次保存对象的属性时重复此过程那个版本再次nil 。 我可能正在做一些显而易见的事情,但在wiki上找不到任何关于此问题的内容。 有人可以向我解释我搞砸了哪里? 更新:我追溯了paper_trail库中的代码,找到了问题所在。 我在record_trail.rb找到了exception: # @api private def attribute_in_previous_version(attr_name) if @in_after_callback && RAILS_GTE_5_1 @record.attribute_before_last_save(attr_name.to_s) else @record.attribute_was(attr_name.to_s) end end 所以在控制台中, @record.attribute_before_last_save(attr_name.to_s)给我nil但是如果我在我的控制台中尝试@record.attribute_was(‘name’) ,它会给我正确的记录属性(在本例中为name)。

Paper_Trail:显示版本之间的差异

我是Rails的新手……使用RubyMine作为IDE。 我有Paper_Trail保存以前版本的数据“xoi_qb”。 我的观点目前正在显示我想要的当前和以前的数据,但我想展示当前版本“xoi_qb”与之前版本“xoi_qb”之间的差异。 例如,当前版本可以是“97”而前一版本可以是“94”,并且我想显示“XOI +/-:+ 3”。 我想显示这种差异,并根据正面或负面的变化添加“+”或“ – ”。 在我的模型中,Paper Trail设置为创建如下版本: def get_xoi_qb xoi_qb = [] self.versions.each do |version| unless version.reify.nil? xoi_qb << version.reify.xoi_qb end end return xoi_qb end 在我的HTML设置中显示如下版本: Previous XOI dated 不知道如何显示两者之间的差异。 真的很感激帮助。