我在 Rails 中实现了一个堆数据结构,所以我基本上得到了一棵二叉树,其节点具有id
、name
和parent_id
.
当我尝试“冒泡”我的一个节点时,我注意到一个非常奇怪的错误。这是怎么回事。
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 个孩子(由于在树中冒出一层)。但不知何故,0 的值“持续存在”,直到我从 ActiveRecord“重新获取”节点。
这是我的相关定义model/item.rb
belongs_to :parent, :class_name => 'Item'
has_many :children, :class_name => 'Item', :foreign_key => 'parent_id'
这在我的堆实现中导致了各种疯狂的行为。有什么方法可以确保在调用影响节点的方法时“更新”节点的子节点?(或者更准确地说,影响其他节点的 parent_id 开始指向它?)
你们可能得到的任何帮助都将是无价的。谢谢!