Mongodb 当使用Desive current_用户变量时,Mongoid是否加载整个用户对象?
我已经嵌入了一个用户的所有活动,假设大多数用户都有成千上万个与之相关的活动。在我的控制器代码中检查当前用户时,Mongoid是否加载包含所有嵌入活动记录的整个用户对象?我的直觉告诉我没有,但我真的很想证实这一点,这样我晚上就能睡得更好。:)谢谢大家! 下面是用户类的简短版本Mongodb 当使用Desive current_用户变量时,Mongoid是否加载整个用户对象?,mongodb,devise,mongoid,Mongodb,Devise,Mongoid,我已经嵌入了一个用户的所有活动,假设大多数用户都有成千上万个与之相关的活动。在我的控制器代码中检查当前用户时,Mongoid是否加载包含所有嵌入活动记录的整个用户对象?我的直觉告诉我没有,但我真的很想证实这一点,这样我晚上就能睡得更好。:)谢谢大家! 下面是用户类的简短版本 class User include Mongoid::Document embeds_many :activities end 编辑 让我澄清一下为什么我特别感兴趣的是在使用当前用户时是否加载了整个对象。由于活
class User
include Mongoid::Document
embeds_many :activities
end
编辑
让我澄清一下为什么我特别感兴趣的是在使用当前用户时是否加载了整个对象。由于活动嵌入到用户文档中,并且大多数用户都有数千条记录,如果我只想检查用户是否登录,那么每次满载都会很昂贵 是的。Desive在验证时请求整个模型,因此如果您调用
当前用户.activities
,Mongoid将允许您访问活动。Desive在进行身份验证时请求整个模型,因此如果您调用当前用户,Mongoid将允许您访问活动
。活动
,但在视图中,有时我只想检查用户是否登录,以便根据用户是否登录显示不同的模块。如果支票中嵌入了大量数据,那么支票的成本似乎非常高。我应该链接这些活动而不是嵌入它们吗?问题主要是,虽然你没有错,但修复它意味着要修补Desive的多个区域来解决它。您可以查看Mongoid中的default scope选项,并了解默认情况下排除活动的情况,这意味着无需对Desive中的几个区域进行修补即可获得所需的内容。或者,您可以通过数据库\u authenticable
模块查找monkey补丁点。但在视图中,有时我只想检查用户是否登录,以便根据用户是否登录显示不同的模块。如果支票中嵌入了大量数据,那么支票的成本似乎非常高。我应该链接这些活动而不是嵌入它们吗?问题主要是,虽然你没有错,但修复它意味着要修补Desive的多个区域来解决它。您可以查看Mongoid中的default scope选项,并了解默认情况下排除活动的情况,这意味着无需对Desive中的几个区域进行修补即可获得所需的内容。或者,您可以通过数据库_authenticable
模块查找猴子补丁点。