用于跟踪Rails上的用户活动的通知系统

时间:2011-09-20 07:26:04

标签: ruby-on-rails thread-safety gem push-notification

我正在开发一个基于事件触发器生成通知的gem。例如,在CMS中,如果创建了文章,则将生成通知“由用户y创建的文章x”。 (如Github / Facebook通知)。

在我的gem中,我有一个has_notifications方法,当在模型中指定时,注册callbacks

问题当然是,当触发回调时,会调用gem中的相应操作,但此操作需要执行操作的用户的用户ID才能生成通知。

我向acts_as_auditedpaper_trail寻求灵感,但两者都使用Thread.current变量来存储用户信息,我当然认为这是hacky and not safe

在基本设计方面,我做得对吗?我还有哪些其他选项可以从我的宝石中捕获用户信息?我是否应该在相应的控制器中设置过滤器以创建通知,以防万一使用vanilla current_user方法?

任何想法都将不胜感激。感谢。

更新

我正在考虑对具有通知回调的模型使用虚拟属性,并使用前过滤器在相应的控制器中设置它们。

2 个答案:

答案 0 :(得分:1)

我建议模仿Cocoa中使用的通知模式。基本上,您可以将用户信息字典传递给通知,以便您可以放置​​所需的数据。

答案 1 :(得分:1)

如果我对你的宝石应该如何使用有正确的预感,我想带有通知回调的模型很可能与用户有一些关系,对吗?

然后,您可以从关系中提取用户的数据,即record.userrecord.user_id。也许您可以默认使用#user,并在用户关系的名称不同时提供.has_notification, through: "account"之类的选项。

如果模型没有关系,那么开发人员就可以将用户对象移交给用户对象并提供自定义方法。