我想一個交易(無關SQL交易),這對於這些用例「負責」的模式:如何建模在Rails的半金融交易
- 用戶可以存錢在他的預付費賬戶
- 用戶還可以從同一個賬戶
- 用戶可以匯款(幫個忙)撤回到另一個用戶
一個建議是使用中的交易模型以下屬性:森der_id,receiver_id和favor_id。在這種情況下,前兩個用例將具有與用戶(sender_id和receiver_id)和favor_id設置爲nil的字段之一,這會違背belongs_to的目的(交易屬於接收者,發件人和好評者)。下面是這個版本的片段:
class Transaction < ActiveRecord::Base
attr_accessible :sender, :receiver, :favor, :amount
belongs_to :sender, :class_name => "User"
belongs_to :receiver, :class_name => "User"
belongs_to :favor, :foreign_key => "favor_id"
scope :of_user, lambda { |user_id|
where("sender_id = ? or receiver_id = ?", user_id, user_id)
}
scope :external_of_user, lambda { |user_id|
where("(sender_id = ? AND receiver_id IS NULL) or (receiver_id = ? AND sender_id IS NULL)", user_id, user_id)
}
end
第二個建議是在每一交易使用user_ID的,但在這種情況下,兩個用戶之間所有的交易將創造兩項紀錄,一是屬於發件人和具有負號,而第二個屬於接收者並具有正數。在這種情況下,存在的fav_id將表明它是存款/取款還是支付幫忙。
這兩個聽起來更合理些?
正是我需要知道的! –
你的青睞總會有與他們相關的獎勵嗎? – iouri
是的,每個人的支付都是支付的 –