我正在使用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。
答案 0 :(得分:0)
您只需关闭此特定查询的身份地图即可。
Mongoid.unit_of_work(disable: :current) do
<<Query>> -- Will hit DB now
end
此外,不要在调试器/ Rails控制台中依赖并测试太多这些东西。它不会给出正确的结果,因为身份映射仅在每个请求后清除。因此调试器的结果不是很明显。