PaperTrail检索has_many关联

时间:2015-11-26 15:25:33

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

我正在使用PaperTrail来修改模型。对于单个模型,这非常有效。但是我无法恢复简单的has_many关系,尽管文档声明这应该有效。

我有两个简单的模型:

class Template < ActiveRecord::Base
  has_many :assets, dependent: :destroy
  has_paper_trail
  #also has a title
end

class Asset < ActiveRecord::Base
  belongs_to :template
  has_paper_trail
  has_attached_file :file, :path => ':class/:id/:filename.:extension'
  do_not_validate_attachment_file_type :file
end

这是我用来测试版本控制的过程。

template = Template.create

template.title = 'initial'
template.assets.create()
template.save

title1 = template.title  #initial
count1 = template.assets.count #1

template.title = 'v2'
template.assets.create()
template.save

title2 = template.title #v2
count2 = template.assets.count #2

template_old = template.versions.last.reify(:has_many => true)

title3 = template_old.title #initial
count3 = template_old.assets.count #2, should be 1

template.title = 'v3'
template.assets.last.destroy()
template.save

title4 = template.title #v3
count4 = template.assets.count #1

template_old = template.versions.last.reify(:has_many => true)

title5 = template_old.title #v2
count5 = template_old.assets.count #1, should be 2

我已将此跟踪到version_concern.rb reify_has_many_directly方法。但对我来说,似乎总是只是恢复当前现场版本的关系。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

当您调用template_old.assets.count时,会对实时数据库进行数据库查询。相反,请使用template_old.assets.length