Rails:臭名昭着的“current_user”来自哪里?

最近我一直在研究Rails,注意到有很多对current_user的引用。 这只是来自devise吗? 我是否必须自己手动定义它,即使我使用Devise? 是否有使用current_user (如会话,用户等的存在)的先决条件?

它由几个gem定义,例如Devise

您需要将user_id存储在某个地方,通常在login后进入会话。它还假定您的应用程序具有并需要用户,身份validation等。

通常,它是这样的:

 class ApplicationController < ActionController::Base def current_user return unless session[:user_id] @current_user ||= User.find(session[:user_id]) end end 

这假定User类存在,例如#{Rails.root}/app/models/user.rb

更新:当没有当前用户时避免额外的数据库查询。

是的, current_user使用session 。 你可以在应用程序控制器中做类似的事情,如果你想要自己的authentication:

 def current_user return unless session[:user_id] @current_user ||= User.find(session[:user_id]) end