2015-11-26 3 views
3

Я использую PaperTrail для моделей версий. Для одной модели это работает очень хорошо. Однако мне не удается восстановить простое отношение has_many, хотя документы указывают, что это должно работать.PaperTrail retrieve has_many association

У меня есть две простые модели:

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 метода. Но мне кажется, что он всегда просто восстанавливает отношения с текущей версией.

Любые идеи?

ответ

0

Когда вы вызываете template_old.assets.count, вы вызываете запрос базы данных к базе данных в реальном времени. Вместо этого используйте template_old.assets.length.

Смежные вопросы