【发布时间】:2020-10-01 14:39:53
【问题描述】:
我有一个嵌入许多消息的用户类。消息具有“源”字段。 我正在尝试获取带有特定“来源”的消息:
m = user.messages.where(source: 'reward').first
我得到零,因为没有。然后我自己添加一个,再次运行查询,但它仍然返回 nil。
当我这样做时:
m = user.messages.to_a.find {|m| m.source == 'reward'}
它按预期工作。 似乎这里有一些缓存,在第一次查询之后,保留数据并忽略以下插入,但我找不到任何方法来禁用它(QueryCache 已禁用且不相关)。
会是什么?
【问题讨论】:
-
您可以尝试运行 user.reload 然后再次运行查询吗?如果它有效,那么它可能是一个缓存问题。如果没有,那么我会假设嵌入对象的 where 实现中存在错误。
-
如果我保存并重新加载它可以工作,但我更喜欢 to_a 解决方案。问题是为什么需要重新加载?这里使用什么缓存,如何防止?
-
所以这证实了你怀疑这是一个缓存问题。我会在jira.mongodb.org/projects/MONGOID/issues 为 monoid 项目打开一个错误