我会为此建议两种解决方案
- 简单的
首先balance
在 User 模型中添加列,并在 Transaction 模型中添加回调,以根据交易类型更新用户的余额。
- 复杂的
如果您认为您也需要deposit_amount
并且purchase amount
不浪费更多时间,那么counter_culture
这就是您所需要的。
counter_culture
有点类似于 rails counter_cache 但允许我们进行各种自定义。
这将涉及以下更改:
将 counter_culture 添加到您的 Gemfile:
gem 'counter_culture', '~> 0.1.33'
然后做bundle install
向表中添加列deposit_amount
和。
purchase_amount
users
类 AddDepositAmountPurchaseAmountToUsers < ActiveRecord::Migration
定义自我改变
add_column :users, :deposit_amount, :decimal, :default => 0
add_column :users, :purchase_amount, :decimal, :default => 0
结尾
结尾
然后做rake db:migrate
对代码进行适当的更改
内部交易模型
counter_culture :user,
column_name: Proc.new {|model|
(model.txn_type == Transaction::DEPOSIT) ? 'deposit_amount' : 'purchase_amount' },
delta_column: :amount
内部用户模型
def balance
@balance ||= deposit_amount - purchase_amount
end
如果您需要有关反文化的更多信息,请在此处阅读