Lon*_*don 1 ruby ruby-on-rails
我目前正在尝试为用户实现简单的审计(仅适用于destroy方法).这样我知道用户是否已被管理员删除或用户自行删除.我想在deleted_by_id我的模型中添加列.
我正在考虑使用before_destroy,并检索用户信息,如本文所述:
http://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/
module UserInfo
def current_user
Thread.current[:user]
end
def self.current_user=(user)
Thread.current[:user] = user
end
end
Run Code Online (Sandbox Code Playgroud)
但是这篇文章是从2007年开始的,我不确定这会在多线程中工作吗?是否有关于这个主题的更新的内容,有没有人最近做过这样的事情来传递经验?
使用该技术肯定会起作用,但会违反希望模型不知道控制器状态的原则.
如果您需要知道谁负责删除,正确的方法是传递参数等信息.
而不是使用回调和线程(在这种情况下都表示不必要的复杂性),只需在模型中定义一个新方法
class User
def delete_user(actor)
self.deleted_by_id = actor.id
# do what you need to do with the record
# such as .destroy or whatever
end
end
Run Code Online (Sandbox Code Playgroud)
然后在你的控制器中简单地调用
@user.delete_user(current_user)
Run Code Online (Sandbox Code Playgroud)
这种方法:
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |