gpt4 book ai didi

ruby-on-rails - Rails 缓存模型变量 - 如何 "force reload"?

转载 作者:行者123 更新时间:2023-12-04 06:11:58 25 4
gpt4 key购买 nike

我在 Rails 中实现了一个堆数据结构,所以我基本上得到了一个二叉树,其节点具有 idname 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 个 child (作为在树中向上冒泡一层的结果).但不知何故 0 的值“一直存在”,直到我从 ActiveRecord 中“重新获取”节点。

这是我的 model/item.rb

中的相关定义
belongs_to :parent, :class_name => 'Item'
has_many :children, :class_name => 'Item', :foreign_key => 'parent_id'

这在我的堆实现中导致了各种疯狂的行为。有什么方法可以确保在调用影响节点的方法时“更新”节点的子节点? (或者更准确地说,影响 其他 节点的 parent_id 开始指向它?)

你们可能获得的任何帮助都是无价的。谢谢!

最佳答案

这里有一个可能有用的建议。

这从数据库中检索项目

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

这使用缓存项

node.swap_up
node.children.size
=> 0

我相信你可以通过这样做来摆脱缓存的副本并强制它返回到数据库

node.swap_up
node.children(true).size
# should get => 2

不必再次查询数据库。

关于ruby-on-rails - Rails 缓存模型变量 - 如何 "force reload"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com