我使用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控制台中过多地依赖和测试这些东西。它不会给出正确的结果,因为身份映射只有在每次请求后才会清除。因此,调试器的结果不是很明显。