我正在开发一个基于事件触发器生成通知的gem。例如,在CMS中,如果创建了文章,则将生成通知“由用户y创建的文章x”。 (如Github / Facebook通知)。
在我的gem中,我有一个has_notifications方法,当在模型中指定时,注册callbacks。
问题当然是,当触发回调时,会调用gem中的相应操作,但此操作需要执行操作的用户的用户ID才能生成通知。
我向acts_as_audited和paper_trail寻求灵感,但两者都使用Thread.current变量来存储用户信息,我当然认为这是hacky and not safe。
在基本设计方面,我做得对吗?我还有哪些其他选项可以从我的宝石中捕获用户信息?我是否应该在相应的控制器中设置过滤器以创建通知,以防万一使用vanilla current_user方法?
任何想法都将不胜感激。感谢。
更新
我正在考虑对具有通知回调的模型使用虚拟属性,并使用前过滤器在相应的控制器中设置它们。
答案 0 :(得分:1)
我建议模仿Cocoa中使用的通知模式。基本上,您可以将用户信息字典传递给通知,以便您可以放置所需的数据。
答案 1 :(得分:1)
如果我对你的宝石应该如何使用有正确的预感,我想带有通知回调的模型很可能与用户有一些关系,对吗?
然后,您可以从关系中提取用户的数据,即record.user
或record.user_id
。也许您可以默认使用#user
,并在用户关系的名称不同时提供.has_notification, through: "account"
之类的选项。
如果模型没有关系,那么开发人员就可以将用户对象移交给用户对象并提供自定义方法。