如何自定义Devise以在会话中存储更多信息?

似乎当Devise记录用户时,只有用户ID存储在会话中。 这意味着每次调用current_user都会导致SQL查询(类似于User.find(:id) )来创建User对象,这在很多情况下是不必要的加载。
例如,我们可能希望在右上方的标题中显示用户的名称,该标题位于布局文件中并在每个响应中呈现。 为此,我们可能只编写current_user.name ,这会导致对users表的SQL查询。

我真的想在会话中存储当前用户的一些基本信息(例如名称和电子邮件),以避免额外的SQL查询。

这个问题的正确解决方案是什么?

已经克服了它。 该SQL查询实际上是免费的。 如果你真的从User.find(id)看到性能问题,那么你的应用程序/数据库/服务器就完全搞砸了。

此外,通过在会话中存储更多数据,您可以开启显示不再是当前数据的可能性。 您是否允许用户编辑他们的信息 – 如果是,他们编辑他们的名字会发生什么? 没有真正的回报是麻烦的。