使用current_user导出服务对象

时间:2016-04-01 09:20:31

标签: ruby-on-rails 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

1 个答案:

答案 0 :(得分:1)

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

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

另外,如上所述,请记住attr_reader为类创建了一个实例变量,因此您应该@current_user = user