2014-11-02 61 views
0

我使用的是mongoid 3,并发现以下问题:Mognid缓存身份映射中部分加载的对象

可以说我们有一个用户,他有很多帖子。

所以

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_ids时,它懒惰地加载到标识映射,但只从db获取id字段。

我的问题是如何处理这个?

我将得到名称== nil,除非调用在对象上重新加载。

回答

0

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

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

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