特定のトランザクション/キャッシュフローに関与できるアカウントは 2 つだけであるため、適切な構造を持っていると思います。多対多の関連付けを使用する場合は、2 つ以上または 2 つ未満のアカウントが関与しないように検証を処理する必要があります。現在の構造では、モデルの関連付けを次のように変更できます。
class Cashflow < ActiveRecord::Base
belongs_to from_account, :class_name => 'Account', :foreign_key => :from_account
belongs_to to_account, :class_name => 'Account', :foreign_key => :to_account
end
class Account < ActiveRecord::Base
has_many :debits, :class_name => 'Cashflow', :foreign_key => :from_account
has_many :credits, :class_name => 'Cashflow', :foreign_key => :to_account
def cashflows
transactions = []
transactions << self.debits
transactions << self.credits
transactions.flatten!
## or may be the following commented way
# Cashflow.where('from_account = ? OR to_account = ?', self.id, self.id)
end
end
このようにして、特定の口座の借方/貸方の金額を追跡し、特定の取引/キャッシュフローに関係する口座を取得することもできます。