此问题与:Access current_user in model。
有关具体来说,我想在一个current_user
中启用对Model.rb
的访问权限。 @moif留下了一条评论,说该解决方案不是线程安全的,我已经读过使用这个过程还有其他注意事项。
我的问题是 - 如果我要补充:
def self.current_user
Thread.local[:current_user]
end
def self.current_user=(usr)
Thread.local[:current_user] = usr
end
到一个Model.rb
(仅用于轻微和不经常),对我的应用程序有什么现实影响,我还需要做些什么来确保它的健康吗?
设置:Rails 1.9,Rails 3.0,Heroku,Authlogic。
答案 0 :(得分:1)
我不确定我是否同意你所走的道路。我同意将current_user传递给模型的其他帖子不合适,但我不会使用Thread.local。原因如下:
开发人员喜欢通过解决方案获得技术,而且没有比Thread.local更“接近系统”了。使用Thread.locals之前它们非常棘手,如果你没有把它弄好,那么你花了无数个小时试图找出问题,更不用说解决方案了。也很难找到能够理解Thread.local复杂性并能够彻底测试代码的测试人员。事实上,我想知道有多少开发人员将类似的东西放在一起进行固体rspec测试(或等效测试)。这个解决方案的“成本”可能不值得。
我想我会看看你想要做什么,看看是否有更简单的解决方案。例如,我可以想到两个副手(可能会在你的情况下工作或不工作):
a)使用外键将历史记录表连接到用户表。 “belongs_to,has_many”;或
b)在历史记录上传递带有attr_accessor的用户名,并在创建对象时设置该用户名。