新手:如何将User传递给Asset模型进行自定义方法?

时间:2012-03-05 09:45:10

标签: ruby-on-rails ruby-on-rails-3 inheritance activerecord models

尝试在我的资产模型中使用current_user.id(设计),只有current_user.id不可用。如何在我的Asset模型中使current_user.id可用? (以某种方式将用户传递给资产模型?)

  after_save :set_photo

  def set_photo
    user = User.find_by_id(1)
    # user = User.find_by_id(current_user.id)  <-- should be this
    user.has_photo = true
    user.save
  end

1 个答案:

答案 0 :(得分:1)

您不能在模型范围内的回调链中使用current_user。这是因为current_user是请求 - 响应周期的属性。此外,必须在模型中使用current_user几乎肯定意味着您的数据库设计不充分或错误。

例如在您的情况下,为什么在User更新时尝试更新Asset的属性?除非它们是相关的,否则这是一种代码味道。

你可以尝试几件事:

  1. 更正数据库设计问题 - 定义AssetUser之间的关联。然后,您可以在控制器中执行@asset.user = current_user(或其他类似的操作)。
  2. 丑陋,强力方法:不依赖于回调并在控制器中明确调用您的方法。