我目前正在尝试为用户实现简单的审核(仅针对销毁方法)。这样我就知道用户是被管理员删除了还是用户自己删除了。我想将 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
但是这篇文章是从 2007 年开始的,我不确定这篇文章是否可以在多线程中工作,是否有关于这个主题的最新信息,最近有没有人做过类似的事情来传递经验?
最佳答案
使用该技术当然可行,但会违反希望模型不知道 Controller 状态的原则。
如果您需要知道谁负责删除,正确的做法是将此类信息作为参数传递。
不要使用回调和线程(在这种情况下都代表不必要的复杂性),只需在您的模型中定义一个新方法
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
然后在你的 Controller 中调用
@user.delete_user(current_user)
这种方法:
- 尊重 MVC 模式
- 可以轻松地以最小的依赖性进行隔离测试(这是一种模型方法)
- 公开自定义 API 而不是将您的应用程序耦合到 ActiveRecord API
关于ruby-on-rails - 在模型方法中使用 Rails 中的当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090507/