私は最近これについていくつか質問をしました、そして私は私が行く必要があるところに到達しています、しかしおそらく私の最後の質問でそこまで到達するのに十分具体的ではありませんでした。そのため、アプリデータに基づいていくつかの指標を計算するための構造をまとめようとしています。これは、追加の指標を簡単に(そして安全に)追加できるように柔軟であり、ビューでの使用も比較的簡単である必要があります。
全体的な目標は、私の見解で次のようなものを可能にするカスタムヘルパーを使用できるようにすることです。
calculate_metric(@metrics.where(:name => 'profit'),@customer,@start_date,@end_date)
これはかなり自明である必要があります。名前は、使用可能なメトリック名のいずれかに置き換えることができ、計算は、任意の期間、任意の顧客または顧客のグループに対して実行できます。
複雑さが生じるのは、メトリックを計算するための式を格納する方法です。これを行うためにまとめた現在の構造を以下に示します。
主要なモデルは、メトリック、操作、操作タイプ、およびオペランドであることに注意してください。この種の構造は、数式が利益のように非常に単純な場合に問題なく機能します。1つには2つのオペランドしかなく@customer.sales.selling_price.sum
、@customer.sales.cost_price.sum
1つの型減算の演算があります。中間値を格納する必要がないため、は、になりregister_target
ます。1
return_register
どこがより複雑になるかを示すために完全な例を書く必要はないと思いますが、2つの日付の間にアカウントを開設した顧客の電子メールアドレスを持つ顧客の割合を計算したい場合は、言うだけで十分です(必ずしもそうではありませんでした)購入)、ヘルパー関数は日付の変動を処理する方法を知る必要があるため、これははるかに複雑になります。
そのため、この構造は非常に複雑であり、単純な式以外には使用するのが難しいようです。この問題に取り組むためのより良い方法を誰かが提案できますか?
EDIT: On the basis of the answer from Railsdog, I have made some slight changes to my model, and re-uploaded the diagram for clarity. Essentially, I have ensured that the reporting_category model can be used to hide intermediate operands from users, and that operands that may be used in user calculations can be presented in a categorised format. All I need now is for someone to assist me in modifying my structure to allow an operation to use either an actual operand or the result of a previous operation in a rails-esqe way.
Thanks for all of your help so far!