【发布时间】:2013-05-26 17:44:18
【问题描述】:
我在 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'
这导致我的堆实现中出现各种疯狂的行为。有什么方法可以确保在调用影响节点的方法时“更新”节点的子节点? (或者更准确地说,这会影响 other 节点的 parent_id 开始指向它?)
你们可能得到的任何帮助都将是无价的。谢谢!
【问题讨论】:
-
你可以尝试用 lambda 重写作用域
:children,以便延迟加载吗?不知道能不能帮到你。。
标签: ruby-on-rails caching activerecord rails-activerecord