Ruby on rails 在应用程序控制器中创建当前的用户助手方法时,为什么不在会话中保存整个用户对象?
我理解如何在应用程序控制器中简单地实现当前的用户方法。通常我们是这样做的Ruby on rails 在应用程序控制器中创建当前的用户助手方法时,为什么不在会话中保存整个用户对象?,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我理解如何在应用程序控制器中简单地实现当前的用户方法。通常我们是这样做的 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产生影响。因此,与其在会话[:user_id]中保存user.id,不如在会
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产生影响。因此,与其在会话[:user_id]中保存user.id,不如在会话[:user]中保存整个用户对象,并执行如下操作
def current_user
session[:user]
end
这种方法的障碍是什么?至少这不会在每次请求时命中DB,并将用户数据保留在会话中。将对象保存到会话中不是一个好主意。在将数据存储到会话中时,必须考虑很少的事情,如
- 数据有多大李>
- 对象可以随时更改,若将对象存储到会话中,该会话用户将不会影响更改