2010-12-08 2 views
0

コンテキスト:ユーザーに直接属している領収書がたくさんあるでしょう、予算追跡アプリ。私は維持する必要があります多くの計算のRailsの - 予算アプリの領収書の合計をキャッシュ - ベストプラクティス

一つは、時間の経過や領収書は、これは計算し、おそらくボトルネックになるために長い時間がかかるだろう増やすなど、すべての領収書の実行中の合計が1日目以降に入力されます。そして、これは頻繁に呼び出されます - ユーザーが新しい領収書を追加するたびに、古いものを編集するなど

ので、イムは、私は、この一定の加算を避けるんか疑問。おそらく私は毎月のフォルダにフェンスの領収書をセクション化する必要があります、各フォルダは、小計のトラックを維持します。したがって、任意の月に新しい領収書を追加する場合、その領収書の合計のみが計算されます。これは適切なアプローチであり、どのように実装すべきか?私はここに月モデルを作成する必要がありますか?

イム大きくないDBの設計と、このアプローチにコメントやクリーンな方法を提供するかもしれないことが誰かを期待していました。

答えて

1

アクティブなレコードのcounter_cacheを見てください。これは古典的な例のように聞こえる。

ユーザーモデルでは、「receipts_count」列を追加します。

add_column :users, :receipts_count, :integer, :default => 0, :null => false 

や領収書のモデルに、あなたはまた、最初にその番号を設定する方法を検討したいと思う

belongs_to :user, :counter_cache => true 

を追加します。これは、レーキタスクまたは移行で行うことができます。これは、あなたが見るように、いくつかの悪夢を持っています。カウンタキャッシュは読み込み専用であり、移行時にそれらを更新するには、値を設定する必要があります。ActiveRecord :: Base.connection.execute( "...")コマンド

あなたが望むならカスタムカウンタを追加する方法がありますが、私がここに追加できる以上にそれを読んでほしいでしょう。

+0

ありがとう、私はカウンターキャッシュを調べるつもりです! – robodisco

関連する問題