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

时间:2011-07-29 02:52:45

标签: sql ruby-on-rails session devise

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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