私はこの要件に取り組んでいます。エンティティが非常に強くリンクされている、非常に大きなオブジェクトリレーショナルモデルがあります。例として、この関係を使用してみましょう。建物には多くのアパートがあり、アパートには多くの区画があります。さて、私が欲しいのは、ある部門で何かが変更されたときに、建物に「通知」するか、建物が「更新」または「変更」されたことをマークすることです。
現在の解決策:部門を「影響を与える」建物としてマークし、部門が更新されるたびに建物の「変更された」タイムスタンプが更新される、自作の実装があります。
望ましい解決策:既存の「すぐに使える」実装(gem、プラグイン、神など)。これにより、実装のリファクタリングの作業を省くことができます。
望ましくない解決策:これらすべての関連付けを:autosave=>trueでマークするように言わないでください。キューに入れられるソリューションが欲しいのですが。
もちろん、目的のソリューションを含まないが、現在のソリューションのパフォーマンスを改善するための提案であるソリューションも歓迎します。望ましい解決策がない場合は、既存の解決策を確実に改善します。
小さな編集:
この動作は一般的である必要があります。これは建物の場合だけでなく、関連付けのあるモデルでもこの動作をすることができます。これは常に同じです。影響を受ける関連付けをフェッチして更新します。今、私は同じルーチンで異なるオブザーバーを書きたくありません。
パフォーマンスの問題について:影響を受けるアソシエーションの更新を更新すると、影響を受けるアソシエーションもトリガーされる必要があります。ここで、1つの建物が100の区画に影響を与え、各区画が100の椅子に影響を与えると想像してみましょう。現在、オブザーバーソリューションはビジネスレベルでのみ機能します。つまり、オブザーバーが行動できるように、すべてのARインスタンスをインスタンス化する必要があります。私はこれを悪いパフォーマンスとして保持しています。Aが100Bに影響する場合、1つのDBステートメントでそれを行います。しかし、SQLを使用してすべてを実行すると、これらの100のオブザーバーをどのようにトリガーできますか?
したがって、主な更新ポイントに戻ります。この動作は一般的であり、最も重要なのは、パフォーマンスが最高である必要があることです(たとえば、アソシエーションによって、has_manyアソシエーションのnxn更新がトリガーされる場合があります)。