2009-08-08 21 views
3

在Rails中,我所见到的最接近Django Signals的是Observers。它们的问题在于,它们限于触发与模型生命周期相关的硬编码事件的回调。相当于Django信号的Rails?

Django信号可以在任何地方创建,触发任何地方并在任何地方处理。模型生命周期回调只是偶然发生的常规信号,由ORM触发。

有谁知道类似的一般解决方案的Rails?它可能是一些通用的Ruby库,与Rails无关,这会更好。


编辑:观察是最接近的事情,但它不是我要找的。这是一个一对多的解决方案。任何人都可以听,但只有原始对象可以发布。我希望你能声明一个信号,任何人都可以触发它并处理它。另外,我不喜欢Ruby Observer规定处理程序有一个#update方法的事实。我希望能够通过适当的签名传递任何方法引用。

我可以使用Ruby Observer来实现我自己的这种代理,但是我试图了解是否有人已经做到了。

+0

它只是Observer模式,它是Ruby标准库的一部分,而不是Rails。据我所知,Rails Observers是一个特殊的常规配置案例。 – 2009-08-08 12:20:51

回答

3

我认为比Rails的Observer更接近于standard Ruby Observable module。它允许您将一个观察者列表添加到一个对象,然后该对象可以在观察者发生更改时向其发送通知。

0

也许acts_as_state机器会有所帮助。这个功能的大部分功能最近都被引入到了Rails的边缘。

1

'wisper'宝石呢? https://github.com/krisleech/wisper

WISPER是一个Ruby库去耦和管理依赖你的Ruby的 使用的Pub/Sub对象。

它通常用作ActiveRecord回调的替代方法,以及用于减少数据和域层之间耦合的观察器。