当前位置:  开发笔记 > 后端 > 正文

是不是在观察者中访问会话?

如何解决《是不是在观察者中访问会话?》经验,为你挑选了1个好方法。

我想在Ruby on Rails应用程序中记录用户的操作.

到目前为止,我有一个模型观察器,它在更新和创建后将日志插入数据库.为了存储哪个用户执行了记录的操作,我需要访问会话,但这是有问题的.

首先,它打破了MVC模型.其次,技术范围从hackish到outlandish,甚至可能甚至将实现绑定到Mongrel服务器.

什么是正确的方法?



1> Orion Edward..:

嗯,这是一个棘手的情况.你几乎必须违反MVC才能让它运行良好.

我会做这样的事情:

class MyObserverClass < ActiveRecord::Observer
  cattr_accessor :current_user # GLOBAL VARIABLE. RELIES ON RAILS BEING SINGLE THREADED

  # other logging code goes here
end

class ApplicationController
  before_filter :set_current_user_for_observer

  def set_current_user_for_observer
    MyObserverClass.current_user = session[:user]
  end
end

它有点hacky,但它并不比我见过的许多其他核心轨道更糟糕.

所有你需要做的就是使它成为线程安全的(这只在你运行jruby时才有意义)是将cattr_accessor改为一个合适的方法,并让它将它的数据存储在线程本地存储中


嗨猎户座,刚刚发现这个,因为我正在寻找这种类型的解决方案.已经有几年了!你还在用这个解决方案吗?好奇如果遇到任何Threaded类型的问题?
推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有