为什么current_user也可以通过带有Devise的@current_user获得?

时间:2014-04-15 17:27:38

标签: ruby-on-rails ruby devise

Devise自述文件未提及@current_userI don't see any reference to it in Devise's source code的任何内容 - 也未提及我应用的源代码(grep -R "@current_user" app/) - 但我可以使用{ {1}}在我的控制器中。那是为什么?

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