Как лучше всего соотносить модели с пэрами?
Например, рассмотрим классический банковский пример
class Transaction < AR::Base
belongs_to :account
# attribute: amount decimal
end
class Account < AR::Base
has_many :transactions
# attribute name string
end
# move money like this:
t1 = Transaction.create(:amount=>10, :account=>Account.find_by_name('Mine'))
t2 = Transaction.create(:amount=>-10, :account=>Account.find_by_name('Yours'))
Я хочу связать две транзакции, чтобы перейти от определенного депозита к точному выводу, который является противоположным.
Я мог бы добавить это к Transaction
модели:
belongs_to :mirror_transaction, :class_name=>'Transaction'
has_one :other_transaction, :class_name=>'Transaction', :foreign_key=>'mirror_transaction_id'
... но это немного странно. Я не могу выразить это лучше, чем это!
Единственный другой способ, который я могу придумать, - это создать третью модель оболочки, что-то вроде:
class TransactionSet < AR::Base
has_many :transactions
end
Обратите внимание, что я не могу просто расширить свою модель транзакции, чтобы она относилась к обеим учетным записям в одной. Некоторые платежи идут «вне системы», то есть они не будут сопряжены. Кроме того, в реальной проблеме, с которой я столкнулся, модель намного сложнее, и я не хочу удваивать все.
Любой совет или другие идеи?
ТИА!