访问模型观察者Ruby on Rails中的current_user

时间:2013-07-08 19:04:26

标签: ruby-on-rails ruby model-view-controller permissions rails-activerecord

情况:我想在保存文档之前立即验证一些用户权限,因此我想出的一个明显的解决方案是创建一个DocumentObserver并修改before_save方法来进行检查。但是,这样做的问题是模型不能(并且不应该)访问current_user,这对于执行检查是必要的。我知道可以通过使用Thread来解决这个问题,但如果可能的话,我宁愿遵循标准做法。有没有办法实现这一目标或更好的方法来实现相同的结果?观察者看起来就像是一个直观而简单的解决方案,不使用它是一种耻辱。

注意事项:我的问题是类似this one,但我希望得到更具体的答案或建议。作为参考,here是current_user解决方法

修订:更复杂 - 控制器在第三方gem中,我无法修改,这意味着我不能简单地将current_user传递给模型。这种复杂情况可能会迫使我修补一些第三方的方法或其他东西,除非有其他一些聪明的方法让它发挥作用......

1 个答案:

答案 0 :(得分:0)

该模型是提供API。您不需要在模型中访问辅助方法,这也是一种非常糟糕的做法。

解决问题很简单。只需提供一个用户实例作为方法参数。

# model
def my_model_method(user)
  # then use this user
end

# controller/view
@int.my_model_method(current_user)