はじめに
私は、トランザクションのみで構成される非常に単純なレイアウトを持つシステムを実行しています (基本的な CRUD を使用)。各トランザクションには、日付、タイプ、借方金額 (マイナス) および貸方金額 (プラス) があります。オンライン バンキングの明細書を考えてみてください。
私が抱えている問題は、コントローラーをスリムに保ち、データベースに対して過剰なクエリを実行する可能性を心配していることです。
簡単なレポートの例
- 選択した期間の合計借方
SUM(debit) as total_debit
- 選択した期間の合計クレジット。
SUM(credit) as total_credit
全体の合計
total_credit - total_debit
レポートは動的な日付範囲を許可する必要があります。
where(date BETWEEN 'x' and 'y')
- 日付の範囲は 1 年を超えることはなく、一度に最大で 1000 トランザクション/行に限定されます
だから私が作成するコントローラで:
def report
@d = Transaction.select("SUM(debit) as total_debit").where("date BETWEEN 'x' AND 'y'")
@c = Transaction.select("SUM(credit) as total_credit").where("date BETWEEN 'x' AND 'y'")
@t = @c.credit_total - @d.debit_total
end
追加の質問情報
私の実際のレポートには、6 つまたは 7 つのデータベース クエリがあり (たとえば、type == 1 または type == 2 ごとに総貸方/借方を引き出すなど)、さらに多くの計算があります。たとえば、特定の貸方/借方の種類を合計してから、これらの合計を他の合計から削除します。
「スキニー モデル、ファット コントローラー」を遵守するために最善を尽くしていますが、コントローラーがビューに渡す必要がある変数の量に問題があります。ビューに渡す変数を作成するところまでは、Rails は非常に簡単に見えます。変数を作成する行をコントローラーに入れ、モデルにいくつかのクエリのビットとピースを入れて「スキニー」にする以外に、他にどのようにそれを行うかはわかりません。
モデルで変数を作成し、コントローラーにそれらをビューに渡す場所に欠けているものはありますか?