纸质跟踪手动版本控制没有按预期工作

时间:2018-02-03 16:00:32

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

我正在使用paper_trail宝石。我的用例涉及在我明确想要而不是像on: [:update]之类的回调时创建版本。

我是通过在我的on: []中添加my_model.rb并在我的模型实例上使用paper_trail.touch_with_version来实现的。问题是每当我第一次使用nil属性保存版本时这样做。很奇怪,下次调用paper_trail.touch_with_version时,它会正确保存,并正确初始化所有属性。

我的rails控制台的示例日志:

document = Document.first
 #<Document:0x0000123456
id: 1,
name: "Sample document">

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我正确获取文档的名称但是如果我退出控制台并重复此过程第一次属性该版本中保存的对象再次为nil

我可能做了一些显而易见的事情,但在wiki上没有找到任何关于此问题的内容。有人可以向我解释我搞砸了哪里?

更新:我追溯了paper_trail库中的代码,找到了问题所在。我在record_trail.rb中找到了异常:

# @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'),它会为我提供记录的正确属性(在本例中为名称)。

0 个答案:

没有答案