metric
私は現在、自分の Rails アプリに modelsとoperand
を持つ計算構造を持っていますoperation_type
。
現在、metric
モデルには多くのがあり、 (合計、乗算など) にoperands
基づいて計算を実行でき、それぞれが右または左として定義されます (つまり、演算が除算の場合、分子と分母を識別できるように) )。operation_type
operand
現在、オペランドは常に何らかのモデルの属性です@customer.sales.selling_price.sum
。
これをスケーラブルにするためには、オペランドを何らかの属性にするか、前の操作の結果にする必要があります。つまり、オペランドをメトリックにすることができます。
私のモデルが現在どのように見えるかの図を含めました:
オペランドを実際のオペランドまたは別のメトリックにできる最もエレガントな方法を教えてくれる人はいますか?
ありがとう!
編集:これまでのところ唯一の答えに基づいているようですが、おそらくポリモーフィックな関連付けがこれを進める方法ですが、答えは非常に簡単なので、この方法でどのように使用できるかわかりません-誰でも詳しく説明できますか?
編集 2: OK、私はどこかに到達していると思います - 基本的に、私は現在 has_many オペランドを持つメトリックと、オペランド has_many メトリックを持っています。メトリクスが多くのメトリクスを持つことができるポリモーフィックな自己結合が必要です - メトリクス モデルがそれ自体を使用できるように、これを別の何か、おそらくcalculated_metricsと呼ぶ必要がありますか? これにより、メトリクスには多くのオペランドがあり、メトリクスには多くの計算されたメトリクスがあるという状況が残ります。
編集 3: 以下のようにモデルを更新しました。これが問題にアプローチする良い方法であるかどうかについての批評をいただければ幸いです。基本的に他のメトリックのホルダーであるというモデルを追加したことに注意してください。calculated_metric
つまり、メトリックは 2 つのオペランド、またはオペランドと Calculated_Metric の組み合わせを使用して計算できます。
EDIT 4: これを行うための詳細な Rails-y の方法を私に示すことができる人には、賞金が追加されました。
編集 5: 報奨金はまだ獲得可能です。以下に提供される回答は詳細ですが、問題にアプローチする別の方法ではなく、これを行うための最良の方法を探しています(つまり、問題を回避する方法を探すのではなく、問題に取り組む最善の方法を教えてください。この機能が必要なので)。ありがとう!
編集 6: これについてはあまり注目されていません - 報奨金の増加は助けになりますか、それともこの質問は単なるランナーではありませんか?