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)
current_user
通常是 ApplicationController 的辅助方法,这意味着它只能在您的控制器和视图中访问。这是一件好事——您的服务对象没有current_user
直接访问的业务,因为 current_user 是根据请求/会话中传递的信息创建的,这是控制器所关心的。
在我看来,您的方法是正确的,最好将您的用户对象作为外部对象传递(即依赖项注入),而不是直接将其耦合到单独对象中的方法。毕竟,您的服务对象是否需要知道或关心是否user
来自会话?
另外,正如前面提到的,请记住,attr_reader
为类创建一个实例变量,因此您应该拥有@current_user = user
.