teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

質問を少々簡潔にする

2017/12/13 22:54

投稿

zendendo
zendendo

スコア43

title CHANGED
File without changes
body CHANGED
@@ -5,15 +5,17 @@
5
5
  ただし、残高を記録しているモデルと取引額を記録しているモデルは別々になっています。
6
6
 
7
7
  いわゆる複数のモデルが絡むバリデーションになると思うのですが、そうゆう場合は、フォームオブジェクトで設定した方がいいと聞き、
8
- フォームオブジェクトを作成してみたのですが、
8
+ フォームオブジェクトでバリデーションを作成してみたのですが、
9
9
  よくわからず、うまくいかず困っています。
10
10
 
11
+
11
12
  現状では、入力フォームで「支払先の口座番号」と「取引額」を入力すると、
12
13
  3つのモデルが同時に動くようになっています。
13
14
  図にするとこんな感じです。
14
15
  ![イメージ説明](79698f8c56d8288ff027077398b008ab.png)
16
+ データのやりとりはこんな感じです。
15
17
  ![イメージ説明](d8d5435d7c127a1a2057b2645800546e.png)
16
- 例えば、支払ユーザーの口座残高が10000(1万)なら、1万を超える数値の入力を
18
+ 例えば、支払ユーザーの口座残高が10000(1万)なら、1万1以上の数値の入力を
17
19
  AmmountTransaction(取引)モデルのamount(取引額)、
18
20
  DepositsAndwithdrawal(入出金)モデルのamount(取引額)、
19
21
  BasicIncomeAccount(口座)モデルのbalance(残高)を更新する際に使う増減額、
@@ -59,10 +61,10 @@
59
61
  コントローラのコードです。3つのモデルを動かす取引処理の記述が書かれています。
60
62
  取引処理は複数のモデルが絡む固有の処理(ビジネスロジックというもの?)なので、
61
63
  この固有の処理もフォームオブジェクトやサービスクラスに
62
- 移動させた方がいいのですが、ひとまずおいておきます。
64
+ フォームオブジェクトに移動させた方がいいのですが、質問の本題から離れるのでひとまずおいておきます。
63
- コントローラには、フォームオブジェクトを呼び出す記述をすると思うのですが、
65
+ コントローラには、フォームオブジェクトを呼び出すコードを記述をすると思うのですが、
64
- 仮に複数のモデルが絡むバリデーションだけを行うフォームオブジェクトの場合、
66
+ 仮に複数のモデルが絡む**バリデーションだけを行うフォームオブジェクトの場合、
65
- どこにどんな記述をすればいいのでしょうか?
67
+ どこにどんな記述をすればいいのでしょうか**
66
68
 
67
69
  ```ruby
68
70
  class AccountTransactionsController < ApplicationController
@@ -147,7 +149,7 @@
147
149
 
148
150
 
149
151
  3つのモデルの状態です。
150
- ```ここに言語を入力
152
+ ```ruby
151
153
  create_table "account_transactions", force: :cascade do |t|
152
154
  t.decimal "amount"
153
155
  t.datetime "created_at", null: false