Devise自述文件未提及@current_user
和I don't see any reference to it in Devise's source code的任何内容 - 也未提及我应用的源代码(grep -R "@current_user" app/
) - 但我可以使用{ {1}}在我的控制器中。那是为什么?
答案 0 :(得分:3)
创建Devise模型时,请说User
,然后Devise为您动态生成帮助方法,名为current_user
。此方法返回实例变量 @current_user
的值。通过使用@current_user
,您只是直接访问实例变量而不是通过current_user
方法。所以,你明白为什么值是相同的。
在Devise中,current_#{mapping}
辅助方法的实现如下:
def current_#{mapping}
@current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
end
其中mapping
将替换为 Devise模型名称,在您的情况下为user
。
请参阅设计源代码中的 current_#{mapping} method definition 。