结论:Model 不应该关心 current_user,需要用的话就应该传入 model,明确 MVC!
一般都放 controller 里
#1 楼 @zgm 那一般呢?
一般都放 controller 里。
简单回答:model 层不应该关心 current_user。
有个 trick 是放到 Thread.current 里,在 before_filter 里每次都设置下。不过大部分需要当前用户的操作都可以在 controller 里把 current_user 传给 model 用,model 应该是不需要知道当前用户的。比如 paper_trail 这个 gem 如果在 controller 中,它会使用 current_uesr 作为修改者。其它环境修改,比如在 Sidekiq worker 里,就需要自己显示指定是谁修改了。
Thread.current
before_filter
current_user
paper_trail
current_uesr
如果是 User 的方法
current_user.do_something
如果是非 User 的方法
topic.do_something_by(current_user)
哎,偶们都是在 model 里用 current_user 的,挺好