質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

308閲覧

railsで銀行振替みたいな取引処理を再現したい

zendendo

総合スコア43

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

2グッド

0クリップ

投稿2017/11/14 06:40

###実現したいこと
ruby(ruby on rails)で単一のポイントを取引する銀行みたいなアプリをつくっています。
やりたい事を一言でまとめるとDB設計が完了したので「取引機能(振替機能)を実装をしたい」のですが、
思ったよりも複雑で混乱しています。

###前提となるモデル設計
モデルの内容は以下の通りです。
イメージ説明

basic_income_account(口座モデル)
・user_id
・account_number(口座番号)
・balance(口座残高)
・update_at(更新日時)

account_transaction(取引モデル)
・withdrawal_account_number(出金口座)
・deposit_account_number(入金口座)
・amount(取引額)
・created_at(作成日時)

deposits_and_withdrawals(入出金モデル)
・account_transaction_id(外部キー)
・transaction_type(入金か出金かのいずれかを記録する)
・amount(取引額)
・created_at(作成日時)

口座モデルは、取引モデルと1:多(口座はたくさん取引を持つ)関係。
取引モデルは、入出金モデルと1:多(取引モデルはたくさんの入出金を持つ)関係。
入出金モデルは、口座モデルと多:1(多数の入出金は、一つの口座が持つ)関係。

###実現したいこと詳細
まず支払ユーザーは取引入力フォームで、
支払先の口座番号と取引額を入力します。

するとデータベースでは、
取引モデルで
「取引id(主キー)」と「出金(支払側)口座番号」と「入金(受取側)口座番号」と「取引額」が1件のレコードとして記録されます。
次に入出金モデルで、
「入出金id」と「取引ID(取引テーブルから参照している外部キー)」と「取引内容(入金か出金か)」と「取引額」が
2件分のレコード(出金で1回、入金で1回)として記録されます。
最後に口座モデルで更新が行われ
出金側の口座残高は減少し、入金側の口座残高が増加し取引が完了となります。
そして、データの整合性を保つ為にこの3つの記録は全てのプロセスが成功しないと
実行されないようにしたい(トランザクション処理にしたい)と考えています。

この場合、どんな風に実装すればいいのか教えて頂ければ幸いです。

LLman, umyu👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaya_ohashi

2017/11/14 06:46

あまり質問意図と違ったところをつついてしまって申し訳ないのですが、このアプリで取引されるデータというのは、現金と交換可能なもの、あるいは現金と同等に扱われるものですか?例えばゲームの中でモンスターを倒して集めるお金であればいいのですが、現金で購入するポイント(プリペイド的なもの)である場合、資金決済法の仮想通貨交換業というものに引っかかる可能性があります。その辺は押さえておられますでしょうか?
zendendo

2017/11/14 07:56

ご指摘ありがとうございます。 株取引ゲームみたいに現実世界の現金や現物は動かない(交換したりしない)ものを 想定しているので大丈夫なのではないかと考えています。
masaya_ohashi

2017/11/14 08:11

なら安心です。ただ、私はこういったデータベース設計は知識が浅いので正しい回答をできる自信がありません。誰か助けて!
umyu

2017/11/14 13:44 編集

データベース定義ですが、実際の取引機能(振替機能)に絞っているという認識でよいでしょうかー? 監査とかの関係上例えば、取引モデルには取引端末情報(店番、機番)が必要になることが多いのですが。
zendendo

2017/11/14 23:02

ご指摘ありがとうございます。 初学者なもので、無知な部分が多くてすみませんが、 データベースの内容は、ゲーム内で完結するものを考えていたので、 取引機能に必要最低限なものだけに絞っています。 そのため実務的なことは考慮していませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問