一些常规解决办法 http://amitrmohanty.wordpress.com/2014/01/20/how-to-get-current_user-in-model-and-observer-rails/ ,但是这样安全吗?貌似以前在坛子有人谈论这个,说不安全。。
这里还有另外一种解决办法 https://github.com/steveklabnik/request_store,貌似说要安全点,是真的吗?
我一开始也是用 User.current
,后来直接给 model 加了 attr_accessor :operator_id
,需要的时候就在 controller 设置一下。
原来你是要记录用户的事件。
Model 可以拿到 current_user,需要拐个弯。但我不喜欢这种做法。职能混淆。因为 model 不需要接触 controller context。
有一个 gem Public Activity 就是这么记录的。
因为我不喜欢这个做法,所以我自己写了一个 [Simple Activity](https://github.com/billychan/simple_activity), 从 controller 出发,不沾 models。你既可以显示在界面中,也可以选择不显示,留着若干原始记录备用。demo 在此。用得上的话请多提宝贵意见。
@small_fish__ 没影响的,在这里的主要区别就是有没有 attr_accessible,我加了判断的。测试在 Rails 3.2.16 下面跑过没问题,不过没写到 fixture 中。
#7 楼 @billy 看了下 gem,整个代码都很 nice, 不过我有几个疑问。 1: 如果有一些 custom action,假如出现极端情况,会不会造成 filter action 配置不好维护。
https://github.com/billychan/simple_activity/blob/master/lib/generators/simple_activity/templates/simple_activity.rb#L7 2: 关于 cache text 如何支持国际化?
@small_fish__ 多谢。
关于 1,只要是 REGEXP 能抓住的都没有问题啊,不太明白极端情况是什么。
关于 2. 其实 cache_text 目前是有些小缺陷的,就是更新那一块没有经过测试,用的时候得注意这点。按常理既然是 cache 就应该是可以 destroy and re-build。当时考虑到 Activity Feed 一般情况下都是看了几个最新的就算,老的历史记录一般是用来做研究而不是给用户看,这个不是主要需求,所以没往深做。只写了个 update 的草稿,没文档,没测试。
i18n 我不太懂。这个 cache_text 只是储存原本 model method 返回的文本结果,不知道 i18n 有无问题。你若知道请指教。
关于 3:任何 action 都是可以的,你可以在 config 里面设置。默认 create|destroy|update.
要有什么新的想法欢迎随时提交 issue 探讨,就不占 ruby-china 的版面了。