【问题标题】:Using "current_user" in models in Ruby on Rails在 Ruby on Rails 的模型中使用“current_user”
【发布时间】:2010-11-10 02:27:11
【问题描述】:

我正在使用 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 传递给模型上的set_email_address 以及您已经传递的params[:email_address]

标签: ruby-on-rails model-view-controller callback


【解决方案1】:

老实说,this answer 总结得差不多了。这根本不属于模型逻辑。正如另一个答案所说,如果您想在模型中使用它,您可以并且应该从控制器传递 current_user 值。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多