私は Rails でヒープ データ構造を実装しているので、基本的にid
、name
、およびを持つノードを持つバイナリ ツリーがあり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_up
、node
2 つの子が必要になることです (ツリー内で 1 レベル上昇した結果として)。しかし、どういうわけか、ActiveRecord からノードを「再取得」するまで、値 0 が「持続」します。
これが私の関連する定義ですmodel/item.rb
belongs_to :parent, :class_name => 'Item'
has_many :children, :class_name => 'Item', :foreign_key => 'parent_id'
これにより、ヒープの実装であらゆる種類の非常識な動作が発生しています。ノードに影響を与えるメソッドが呼び出されたときに、ノードの子が「更新」されるようにする方法はありますか? (または、より正確には、他のノードのparent_idに影響を与えて、それを指し始めるのでしょうか?)
皆さんのどんな助けもかけがえのないものになるでしょう。ありがとう!