###前提
railsで数量を振替する銀行みたいな機能を実装できたので、
全てのアカウントが持つ残高に対して増減(計算)を
定時処理(rakeタスク)したいと考えています。
例えば、「毎月、残高の1%を回収します(全ての口座は回収役の口座に残高の1%を支払う)」ということをやりたいと思っています。
ただ、振替処理には複数のモデルが動いている為
update_allで残高カラムのみを「一括的な更新処理」してしまうと
他のモデルとのデータの整合性が崩れてしまうので、
それぞれのモデルに対して「一括的な処理」をしなければならないと考えています。
![]
現状では、この図のモデルを動かすことで振替処理を実行している。
###実現したいこと
ここからが本題です。
前置きが長くなりましたが、やりたいことを一言で言うと
「ほぼ全ての口座が、自動的な投稿を一斉に行う」ようにしたいのです。
Account(口座)モデルはAccountTransaction(取引)モデルを多数保有する1:多の関係になっていて、
Accoutモデルには、balance(残高)が記録され、
AccountTransactionモデルにはamount(取引額)と支払口座idと受取口座idを記録することになっています。
そこで、
AccountTransactionモデルに対して
・他のモデルのカラムの値(Accountモデルのbalanceカラム)から1%分の額を計算して取引額として記録させ、
・各支払口座idを記録させ、
・ほぼ全ての口座で(回収役口座であるAccountモデルのidが19のレコードを除いて)一括で行う
にはどうすればいいでしょうか?
###試しに書いたソースコード
lib/tasksのrakeファイルより抜粋。
begin ActiveRecord::Base.transaction{ #取引アカウントにレコードを一括作成したい AccountTransaction.where.not(id: 19).create( withdrawal_account_id: ??????????,#支払側の口座id、 "deposit_account_id: 19",#回収役の口座id(受取側の口座id) amount: ?????? #取引額 ) } end
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.1.3
ruby 2.4.1
あなたの回答
tips
プレビュー