2011-08-13 3 views
0

私はRailsにはかなり新しいので、間違った方法でこれを実行すれば私を許してください。モデルの値をロールアップするレール

私には金額が関連付けられているモデルの取引があります。ただし、金額は子モデル(取引先)の金額の合計として計算されるため、実際に取引テーブルに金額項目を設定して冗長性を作成することは望ましくありませんでした。私はトランザクションレベルで金額を取得して設定することができたいと思っています(取引で設定された金額は取引業者間で均等に分割されます)。

私の質問は次のとおりです。この状況のた​​めに適切な実装がなされていますか?

答えて

0

いいえ、私は考えていませんcomposed_ofあなたが欲しいものです。読み取り部分は、実際にはかなり簡単です:

class Transaction < ActiveRecord::Base 
    has_many :transactors 
    ... 
    def amount 
    self.transactors.sum(:amount) 
    end 
    ... 
end 

(均等子モデルの間で分割する)、ライト部分はかなりかかわらず異例で、もう少し複雑な、私はあなたがこのような何かしたいとします

class Transaction < ActiveRecord::Base 
    has_many :transactors 
    ... 
    def amount=(value) 
    self.transactors.each do |transactor| 
     transactor.update_attributes(:amount => value.to_f/self.transactors.count) 
    end 
    end 
    ... 
end 
+0

これは私がvanilla Rubyのために行うことですが、これはRailsの適切な方法であるとは確信していませんでした。私はおそらく、compos_ofに、私が望むかもしれないRails特有の機能を追加しているかもしれないと考えました。ですから、compos_ofは主にデータベースのフィールドを次の例まで抽象化するために使用されていると考えています(たとえば、ドキュメントのMoneyやアドレスの例など)。それは別の用途ですか? –

関連する問題