1

Vestal バージョン ( http://github.com/laserlemon/vestal_versions )でバグを発見した可能性があると思います-revert_toの動作は、同じオブジェクトで過去に行った復帰に依存しているようです。次に例を示します。

>> a = Annotation.find(1384)
=> #<Annotation id: 1384, body: "Just hanging out -- \"playing possum\" -- at the stor...", last_updated_by_id: 3, created_by_id: 3, song_id: 30, deleted_at: nil, created_at: "2009-09-06 01:56:55", updated_at: "2009-10-27 22:02:35", referent: "in the spot playing possum\nDebating my destination,...", vote_score: 0>
>> a.revert_to(9)
=> 9
>> a.body
=> #<RDiscount:0x21cf7bc @filter_styles=true, @smart=true, @fold_lines=nil, @filter_html=nil, @text="Just hanging out -- \"playing possum\" -- at the store, lacing up the new Nikes, trying to decide where to go for dinner">


>> a = Annotation.find(1384)
=> #<Annotation id: 1384, body: "Just hanging out -- \"playing possum\" -- at the stor...", last_updated_by_id: 3, created_by_id: 3, song_id: 30, deleted_at: nil, created_at: "2009-09-06 01:56:55", updated_at: "2009-10-27 22:02:35", referent: "in the spot playing possum\nDebating my destination,...", vote_score: 0>
>> a.revert_to(8)
=> 8
>> a.body
=> #<RDiscount:0x21b5a10 @filter_styles=true, @smart=true, @fold_lines=nil, @filter_html=nil, @text="I.e. just hanging out -- \"playing possum\" -- in the living room, lacing up the new Nikes, trying to decide where to go for dinner">
>> a.revert_to(:last)
=> 11
>> a.revert_to(9)
=> 9
>> a.body
=> #<RDiscount:0x21b5a10 @filter_styles=true, @smart=true, @fold_lines=nil, @filter_html=nil, @text="I.e. just hanging out -- \"playing possum\" -- in the living room, lacing up the new Nikes, trying to decide where to go for dinner">

つまり、新たにロードされたアノテーションからの場合revert_to(9)、body フィールドには RDiscount オブジェクトが含まれており、そのテキストは「ただぶらぶら -- \"ポッサムをプレイ中\" -- ストアで」 (バージョン 9 の時点での本体) で始まります。

revert_to(8)ただし、新たにロードされたアノテーションから戻した場合revert_to(:last)、アノテーションの本文を確認してくださいrevert_to(9)。バージョン 9 ではアノテーションの本文が間違っています (バージョン 8 のアノテーションの本文と一致します)。

何かご意見は?

4

1 に答える 1

3

これはvestal_versionsのバグではなく、バージョンの変更後にレールが関連付けをリロードしないためです。AnnotationあなたがあなたのIDを保持していると仮定するとRDiscount、次のことが起こります:

  1. xAnnotationの ID を持つ "a"をフェッチします。RDiscount
  2. 「a」を以前のバージョンに戻すと、RDiscountid が y に変わります。
  3. を呼び出しa.bodyて、Rails にRDiscountID y のオブジェクトをロードさせます。
  4. "a" を に戻すと:lastRDiscountid が再び x に変わります。
  5. もう一度呼び出しますa.bodyが、Rails は既にオブジェクトをロードしており、RDiscount代わりにこのオブジェクトを返します。
于 2009-11-23T15:45:21.977 に答える