我理解如何在应用程序控制器中简单地实现current_user方法。通常我们做
helper_method :current_user
def current_user
@current_user ||= User.find_by_id(session[:user_id]) if session[:user_id].present?
end
但是我注意到,如果我们有session [:user_id],它会在每次请求时对DB造成打击。因此,不要在session [:user_id]中保存user.id,而是为什么我们不在session [:user]中保存整个用户对象,并且这样做。
def current_user
session[:user]
end
这种方法有什么绊脚石?至少在每次请求时都不会命中DB并将用户数据保存在会话中。
答案 0 :(得分:1)
将对象保存到会话不是一个好主意。在将数据存储到会话中时,您必须考虑很少的事情,例如
答案 1 :(得分:0)
会话存储作为用户浏览器中的cookie和cookie意味着严格的大小限制为4kB。这很好,因为您不应该在会话中存储大量数据。在会话中存储当前用户的数据库ID通常是正常的,但不建议存储用户的对象。