我正在使用设计并创建了一个服务对象 - 一切都按预期完美地工作。但是我想知道如何包含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
答案 0 :(得分:1)
current_user
通常是ApplicationController的辅助方法,这意味着它只能在您的控制器和视图中访问。这是一件好事 - 您的服务对象没有直接访问current_user
的业务,因为current_user是根据请求/会话中传递的信息创建的,这是控制器关心的问题。
在我看来,您的方法是正确的,将您的用户对象作为外部对象(即依赖注入)传递比将其直接耦合到单独对象中的方法更可取。毕竟,您的服务对象是否需要知道或关心user
是否来自会话?
另外,如上所述,请记住attr_reader
为类创建了一个实例变量,因此您应该@current_user = user
。