Rails:在回调之前/之后获得user_agent的优雅方式?

时间:2012-03-28 21:18:48

标签: ruby-on-rails ruby-on-rails-3 callback

我有一个:after_update回调记录了对我的某个模型的修改。

我想知道当编辑来自网络请求时,是否有一种优雅的方法可以将user_agent放入此回调中。

我知道它在模型中,它无法访问请求对象。并且不必从Web请求进行编辑。例如,如果从控制台进行编辑,如果user_agent在这种情况下为nil就没问题。

我能想到的唯一选择是找到可能更新模型并从那里进行调用的每个控制器操作,但这是一个巨大的代码库,它正在快速变化,因此很容易错过这种方式。

也许有一种聪明的方法可以将attr_acessor放在名为user_agent的模型上(不存储在数据库中)并确保每个控制器操作都在编辑时填充它?但不确定。

谢谢!

1 个答案:

答案 0 :(得分:1)

优雅我不确定,但我相信Rails会为每个请求使用1个线程(生成它来处理它),所以你可以做到

Thread.current[:my_user_agent] = request.user_agent

并且在该请求期间可以通过应用程序访问。我也很确定没有记录的行为,所以如果Rails修改它你可能会遇到问题。