2

私はそれが 2 つのバージョン間のすべての変更の結合であることを期待していました。(vestal バージョン 1.0.2 を使用)

ruby-1.8.7-p174 > contact.version 
 => 12 
ruby-1.8.7-p174 > contact.latest_approved_version
 => 8 
ruby-1.8.7-p174 > contact.changes
 => {} 
ruby-1.8.7-p174 > contact.versions.last.changes
 => {"first_name"=>["I changed this one baby", "AdminF"]} 
ruby-1.8.7-p174 > contact.changes_between(8,12)
 => {} 
ruby-1.8.7-p174 > contact.changes_between(9,12)
 => {"deleted"=>[true, false]} 
ruby-1.8.7-p174 > contact.changes_between(10,12)
 => {} 
ruby-1.8.7-p174 > contact.changes_between(11,12)
 => {"first_name"=>["I changed this one baby", "AdminF"]} 

8 と 12 の間では変化が見られませんが、いくつかの間では変化が見られます。

奇妙なことは、これが昨日働いていたことを誓うということです!

ヴェスタルが使用している方法は次のとおりです。問題が何であるかはわかりません。

 def changes_between(from, to)
    from_number, to_number = versions.number_at(from), versions.number_at(to)
    return {} if from_number == to_number
    chain = versions.between(from_number, to_number).reject(&:initial?)
    return {} if chain.empty?

    backward = from_number > to_number
    backward ? chain.pop : chain.shift unless from_number == 1 || to_number == 1

    chain.inject({}) do |changes, version|
      changes.append_changes!(backward ? version.changes.reverse_changes : version.changes)
    end
  end
4

1 に答える 1

0

あなたが提供した例に問題がない可能性があります。たとえば、バージョン 8 と 12 の間に違いがない場合。バージョン 9、10、および 11 で変更があったとしても、モデルの属性が同じ値に戻された場合、changes_between メソッドは変更を表示しません。

それを確認する最も簡単な方法は、次を確認することだと思います。

>> contact.revert_to(8)
=> "8"
>> contact.inspect
=> "#<Contact ... >"
>> contact.revert_to(12)
=> "12"
>> contact.inspect
=> "#<Contact ... >"

そして、出力を比較します。あなたが説明した結果の他の理由は考えられません。

ところで、あなたが行った「last_approved_version」への呼び出しは、手動でモデルに追加したものですか、それともvestal_versionsに組み込まれているものですか? 私も 1.0.2 vestal_version を使用しており、それへの参照が見つからないためです。したがって、それが本当に組み込みのものである場合は、vestal_version のフォークが異なる可能性があり、それが原因である可能性があります...

于 2010-11-18T14:35:28.703 に答える