我正在重新设计我的活动提要,我已经用redis和rails实现了逻辑(顺便说一下,works很好),但是我仍然不确定如何创建/触发事件。
在我的第一种方法中,我使用了观察者,它的缺点是没有可用的current_user。而且,使用观察者也是个坏主意:)
我喜欢的方法是在控制器中创建/触发事件,这些事件应该如下所示:
class UserController < LocationController
def invite
...
if user.save
trigger! UserInvitedEvent, {creator: current_user, ...}, :create
....
end
end
end触发方法应该
我看了一些宝石(指南针.)但我找不到一个巧妙的实现。
发布于 2012-10-01 13:19:15
我会构建如下内容:
# config/initializers/event_tracking.rb
modlue EventTracking
attr_accessor :enabled
def enable
@enabled = true
end
def disable
@enabled = false
end
module_function
def Track(event, options)
if EventTracking.enabled
event.classify.constantize.new(options)
end
end
end
include EventTracking
EventTracking.enable unless Rails.env.test?module_function黑客让我们拥有全局的Track()函数,并将其导出到全局命名空间,您(关键是该方法是复制的到全局范围,因此它实际上是全局的,在这里阅读更多:function)
然后,我们启用除了生产之外的所有模式的跟踪,我们在Rails中调用event.classify.constantize,它应该将类似:user_invited_event的东西转换为UserInvitedEvent,并提供了名称空间的可能性,例如Track(:'users/invited')。它的语义由ActiveSupport的拐点模块定义。
我认为这应该是一个不错的开始,你的跟踪代码,我一直在使用,在一个项目中取得了很大的成功,直到现在!
发布于 2012-10-01 13:23:40
使用(新的) rails内部化和ActiveSupport::Notifications系统,您可以完全解耦通知和实际的提要结构。
请参阅http://railscasts.com/episodes/249-notifications-in-rails-3?view=asciicast
https://stackoverflow.com/questions/12673330
复制相似问题