带有 current_user 的 Rails 服务对象

Ada*_*ker 4 ruby-on-rails devise

我正在使用 devise 并创建了一个服务对象 - 一切都按预期完美运行。但是我想知道如何包含 current_user?因为我必须始终传递 current_user 或 user_signed_in 的那一刻?当我在不同的类和视图中使用相同的方法时,变量会很烦人,我该如何去做呢?

目前我有这个用于测试:

class User
    class GetStart
        attr_reader :current_user

        def initialize(user)
            @current_user = user
            p current_user
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

Ant*_*y E 5

current_user通常是 ApplicationController 的辅助方法,这意味着它只能在您的控制器和视图中访问。这是一件好事——您的服务对象没有current_user直接访问的业务,因为 current_user 是根据请求/会话中传递的信息创建的,这是控制器所关心的。

在我看来,您的方法是正确的,最好将您的用户对象作为外部对象传递(即依赖项注入),而不是直接将其耦合到单独对象中的方法。毕竟,您的服务对象是否需要知道或关心是否user来自会话?

另外,正如前面提到的,请记住,attr_reader为类创建一个实例变量,因此您应该拥有@current_user = user.