似乎当Devise记录用户时,只有用户ID存储在会话中。
这意味着每次调用current_user
都会导致SQL查询(类似User.find(:id)
)来创建User对象,这在很多情况下是不必要的负载。
例如,我们可能希望在右上方的标题中显示用户的名称,该标题位于布局文件中并在每个响应中呈现。为此,我们可能只写current_user.name
,这会导致对用户表的SQL查询。
我真的想在会话中存储当前用户的一些基本信息(例如名称和电子邮件),以避免额外的SQL查询。
解决这个问题的正确方法是什么?
答案 0 :(得分:2)
已经克服了它。该SQL查询实际上是免费的。如果您确实发现了User.find(id)
的性能问题,那么您的应用/数据库/服务器就完全搞砸了。
此外,通过在会话中存储更多数据,您可以开启显示不再是最新数据的可能性。您是否允许用户编辑他们的信息 - 如果是这样,他们编辑他们的名字会发生什么?没有真正的回报是很麻烦的。