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

时间:2014-11-02 10:00:54

标签: ruby-on-rails-3 mongoid3

我正在使用mongoid 3并发现了以下问题:

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

所以

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

忽略丢失的mongoid :: document。

我正在使用rails,因此我获得了身份地图。

让我们说用户想要编辑他的一篇帖子。

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

我写下面的代码:

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

检查后我写了

 Post.find post_id

如果我检查这篇文章,我看到它只加载了id字段。

我猜是因为当我要求post_ids时,它被延迟加载到身份地图,但只从db中获取了id字段。

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

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

1 个答案:

答案 0 :(得分:0)

您只需关闭此特定查询的身份地图即可。

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

此外,不要在调试器/ Rails控制台中依赖并测试太多这些东西。它不会给出正确的结果,因为身份映射仅在每个请求后清除。因此调试器的结果不是很明显。