Mognid在身份映射中缓存部分加载的对象



我使用mongoid 3,发现以下问题:

假设我们有一个用户,他有很多帖子。

所以

class User
  has_many :posts
class Post
  field :name
  belongs_to :user

忽略缺少的mongoid::文档。

我正在使用铁轨,所以我得到了身份地图。

假设用户想要编辑他的一个帖子。

我想在服务器端确保帖子实际上属于用户。

我写了以下代码:

unless current_user.post_ids.include? post_id
  raise "invalid request"

检查后我写

 Post.find post_id

如果我检查这个帖子,我会发现它只加载了id字段。

我想这是因为当我请求post_id时,它被延迟加载到身份映射,但只从db中获取了id字段。

我的问题是如何处理?

除非对post对象调用reload,否则我将得到name==nil。

您可以简单地关闭此特定查询的标识映射。

Mongoid.unit_of_work(disable: :current) do
  <<Query>> -- Will hit DB now
end

另外,不要在调试器/RRails控制台中过多地依赖和测试这些东西。它不会给出正确的结果,因为身份映射只有在每次请求后才会清除。因此,调试器的结果不是很明显。

最新更新