我不知道,如果您計劃在您的視圖來顯示這些值,但你可以做這樣的事情:
sender = Users.where(email: params[:email]).first
# This returns the user
recipient = Users.find(current_user.id)
# or just current_user if it inherit from the User class
money_to_substract = recipient.money - params[:money]
money_to_sum = recipient.money + params[:money]
然後你transsaction會有點dryier
User.transaction do
@logs = Logs.new(log_params)
@tt = sender.update(money: money_to_substract)
# update saves to the database so no need to call save
# @tt.save
@wr = recipient.update(money: money_to_sum)
# update saves to the database so no need to call save
# @wr.save
end
但恕我直言,我會做這樣的事情:
型號/ User.rb
class User < ActiveRecord::Base
...
def sends_money(amount)
money_to_substract = self.money - amount
update(money: money_to_substract)
end
def receives_money(amount)
money_to_sum = self.money + amount
update(money: money_to_sum)
end
...
end
在你的控制器
amount = params[:money].to_i
User.transaction do
@logs = Logs.new(log_params)
@tt = sender.sends_money(amount)
@wr = recipient.receives_money(amount)
end
這使得事情更容易閱讀,並按照通過您的代碼。
希望這會有所幫助!
我建議在交易中包裝併爲您的貨幣對象使用可靠的驗證服務。不要簡單地通過'params [:money]'。不要惹$$$ ^^。 –
更好的是,您可以創建一個MoneyTransfer模型來跟蹤交易。餘額將是所有交易應用後的快照。否則,事情可能會變得混亂。 –
謝謝你,這真的很有用 – Fluffy