在Ruby on Rails中的模型中使用“current_user”

我正在使用Devise,它在助手中提供了“current_user”方法,因此我可以在视图和控制器中使用。

但是现在我想访问模型中的“current_user”方法。 这就是我现在在控制器中所拥有的。

def create set_email_address(params[:email_address]) Comment.new(params[:content], set_email_address) # [snip] end private def set_email_address(param_email) if current_user @email_address = current_user.email else @email_address = param_email end end 

我想将“set_email_address”移动到一个模型,因为我认为这是一个逻辑,应该交给模型。 我打算用一个Rails回调来连接这个方法。

老实说, 这个答案几乎总结了一下。 这根本不属于模型逻辑。 正如另一个答案所说,如果你想在模型中使用它,你可以而且应该从控制器传递current_user值。

current_user是请求或会话绑定数据,我建议您将其保留在模型之外。 这就是控制器的用武之地。 但是,如果您觉得它应该在其他地方可用,那么将它移出这个特定的控制器并不是一个坏主意。 在这种情况下,您可以将其移动到ApplicationController,或者更好的是,可以将其混合到此控制器中的模块。

您仍然需要将@email_address设置行为与决定使用哪个电子邮件地址分开,因为在模型的上下文中设置该实例变量没有意义。