3

私は Rails でヒープ データ構造を実装しているので、基本的にidname、およびを持つノードを持つバイナリ ツリーがありparent_idます。

ノードの 1 つを「バブルアップ」しようとすると、非常に奇妙なエラーが発生することに気付きました。これがどうした。

node = Item.find(266)
node.children.size
 => 0

node.swap_up
node.children.size
 => 0

node = Item.find(266)
node.children.size
 => 2

私が期待している動作は、 を実行した後swap_upnode2 つの子が必要になることです (ツリー内で 1 レベル上昇した結果として)。しかし、どういうわけか、ActiveRecord からノードを「再取得」するまで、値 0 が「持続」します。

これが私の関連する定義ですmodel/item.rb

belongs_to :parent, :class_name => 'Item'
has_many :children, :class_name => 'Item', :foreign_key => 'parent_id'

これにより、ヒープの実装であらゆる種類の非常識な動作が発生しています。ノードに影響を与えるメソッドが呼び出されたときに、ノードの子が「更新」されるようにする方法はありますか? (または、より正確には、他のノードのparent_idに影響を与えて、それを指し始めるのでしょうか?)

皆さんのどんな助けもかけがえのないものになるでしょう。ありがとう!

4

1 に答える 1