1
看来,当Devise登录用户时,只有用户标识存储在会话中。 这意味着只要调用current_user
就会导致SQL查询(类似于User.find(:id)
)来创建User对象,这在很多情况下是不必要的负载。
例如,我们可能希望在右上角的标题中显示用户名,该标题位于布局文件中,并在每个响应中呈现。为此,我们可能只写current_user.name
,这会导致对用户表的SQL查询。如何自定义设计以在会话中存储更多信息?
我真的想在会话中存储当前用户的一些基本信息(例如姓名和电子邮件地址),以避免额外的SQL查询。
这个问题的正确解决方案是什么?
你为什么说“那SQL查询是有效的免费的”?我认为这确实是一个应该避免的额外查询。并且当用户更新他的名字时,我们只需要更新会话。 – Tao
该查询使用主键查找记录,因此数据库将以极快的速度返回该记录。接下来,ActiveRecord将实例化记录对象,但单个AR记录再次构建起来非常快。规则#1:优化前后的配置文件。这对我来说听起来像是不经意的过早优化。如果添加此用户检索会导致页面构建时间发生重大变化,则a)您的应用程序对数据库没有做其他任何操作,或者b)您的数据库表/索引已搞乱并需要修复或重新调整。 –
好吧,谢谢〜 – Tao