将模型作为对等模型关联的最佳方式是什么?ActiveRecord:对等模型
例如,考虑经典的银行业例子
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
请注意,我不能简单地延长我的交易模式涉及到两个账户中的一个。一些付款“超出系统”,即他们不会配对。另外,在现实世界的问题中,模型要复杂得多,我不想把所有东西都加倍。
任何建议或其他想法?
TIA!