【问题标题】:Why is current_user also available via @current_user with Devise?为什么 current_user 也可以通过 @current_user 和 Devise 获得?
【发布时间】:2014-04-16 06:11:46
【问题描述】:

Devise README 没有提到任何关于 @current_userI don't see any reference to it in Devise's source code 的内容 - 也没有在我的应用程序的源代码 (grep -R "@current_user" app/) 中提及 - 但我可以在我的控制器中使用 @current_user。这是为什么呢?

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    当您创建一个 Devise 模型时,例如 User,然后 Devise 会动态地为您生成一个 helper 方法,命名为 current_user。此方法返回 实例变量 @current_user 的值。通过使用@current_user,您只是直接访问实例变量,而不是通过current_user 方法。所以,你明白为什么这些值是相同的了。

    在Devise中,current_#{mapping}辅助方法的实现如下:

          def current_#{mapping}
            @current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
          end
    

    mapping 将替换为您的设计模型名称,在您的情况下为 user

    参考设计源代码中的current_#{mapping} method definition

    【讨论】:

    • Kirti,您知道每个现有 gem 的所有文档吗?因为每次我看到您的一个答案时,您都会在文档中给出确切的参考资料(顺便说一句,这很棒)!
    • @MrYoshiji 只有我使用的宝石:D
    • 我对您开发的应用程序数量感到好奇?您似乎对 Ruby、Rails 和流行的 gem 有非常丰富的知识!
    • @MrYoshiji 我最近从 Java 转换为 Ruby。你可以说一个好奇的菜鸟。 Ruby/Rails 中的应用程序不多,但肯定会朝着这个方向努力。
    • 有一天你会回到java吗?我从不喜欢 Java……类型转换太多了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多