4

Rails では、Django Signalsに最も近いのはObserversです。それらの問題は、モデルのライフサイクルに関連するハードコードされたイベントでのコールバックのトリガーに制限されていることです。

Django シグナルは、どこでも作成、トリガー、処理できます。モデル ライフサイクル コールバックは、たまたま組み込まれ、ORM によってトリガーされる通常のシグナルです。

Railsの同様の一般的なソリューションを知っている人はいますか? それは、Rails に関連付けられていない一般的な Ruby ライブラリである可能性があり、これはさらに優れています。


編集:オブザーバーは最も近いものですが、私が探しているものではありません。これは 1 対多のソリューションです。誰でも聞くことができますが、元のオブジェクトだけが投稿できます。シグナルを宣言して、誰でもそれをトリガーして処理できるようなものが欲しいです。また、Ruby Observer がハンドラーに #update メソッドがあることを指示するという事実も好きではありません。適切なシグネチャを使用して任意のメソッド参照を渡すことができるようにしたいと考えています。

Ruby Observer を使用して独自のブローカーを実装することもできますが、誰かが既に実装しているかどうかを調べようとしています。

4

5 に答える 5

3

Rails の Observer に近いのは、標準の Ruby Observable moduleだと思います。オブザーバーのリストをオブジェクトに追加すると、オブジェクトが変更されたときにオブザーバーに通知を送信できます。

于 2009-08-08T08:55:03.753 に答える
0

それでgemを実装しました。https://github.com/pkoch/django_signal/

于 2012-03-19T05:39:14.553 に答える
0

Ruby gem 'watchable' が最も適切な選択です https://github.com/jbarnette/watchable

これには、Django (および Qt や他の多くのフレームワーク) に非常になじみのある構文があります。

于 2013-02-26T15:30:43.550 に答える
0

おそらくacts_as_stateマシンが役立ちます。この機能のほとんどは、最近 Rails Edge に組み込まれました。

于 2009-08-08T10:45:03.440 に答える