質問編集履歴

1

コードを修正しましたが、うまくいきませんでした。

2021/01/16 02:10

投稿

oiykram
oiykram

スコア11

test CHANGED
@@ -1 +1 @@
1
- transactionにつ
1
+ transactionでうまくrollbackされな
test CHANGED
@@ -50,122 +50,58 @@
50
50
 
51
51
  ..........
52
52
 
53
+ User.transaction do
54
+
55
+ begin
56
+
53
- @users.each do |user|
57
+ @users.each do |user|
54
58
 
55
59
  ........
56
60
 
57
- begin
61
+ q = #INSERT文
58
62
 
59
- ActiveRecord::Base.transaction do
60
63
 
61
- q = #INSERT文です
62
64
 
63
- if library_db_by(q) == true
65
+ libraries.each {|p| #各図書館へinsert
64
66
 
65
- raise #例外を発生させる
67
+ client = #dbへ接続
66
68
 
67
- end
69
+ p.query("start transaction")
68
70
 
69
- begin
71
+ p.query(insert)
70
72
 
71
- if user.save!
73
+     
72
74
 
73
- count += 1
75
+ if user.save #webに登録できれば、localにcommit
74
76
 
75
- end
77
+ p.query("commit")
76
78
 
77
- rescue
78
-
79
- flash[:notice] = "更新に失敗しました。"
80
-
81
- redirect_to @back_url and return
82
-
83
- end
84
-
85
- end
86
-
87
- rescue
88
-
89
- flash[:notice] = "更新しました"
90
-
91
- redirect_to @back_url and return
92
-
93
- end
94
-
95
- end
96
-
97
- flash[:notice] = "更新しました"
98
-
99
- redirect_to @back_url and return
100
-
101
- end
102
-
103
- ```
104
-
105
- **application_controller.rb**
106
-
107
- ```applicationcontroller
108
-
109
- def library_db_by(q)
110
-
111
- result_flg = false
112
-
113
- @librarys = Library.all
114
-
115
- after_array = Array.new
79
+ after_array << client
116
-
117
- ActiveRecord::Base.transaction do
118
-
119
- begin
120
-
121
- @librarys.each do |library|
122
-
123
- host_ = library.IP_ADDRESS
124
-
125
- port_ = library.MYSQL_PORT
126
-
127
- client = #host_,port_からdbを代入
128
-
129
- client.query('BEGIN')
130
-
131
- q.each do |i, que|
132
-
133
- client.query('COMMIT')
134
80
 
135
81
  end
136
82
 
137
- after_array << client #commitした図書館情報を追加
83
+ }
138
84
 
139
- result_flg = true
85
+ end # users end
140
86
 
141
- end
87
+ rescue => e
142
88
 
143
- rescue => e
89
+ logger.error e
144
90
 
145
- result_flg = false
146
91
 
147
- if client.present?
148
92
 
149
- client.query('ROLLBACK')
93
+ after_array.each {|p| # error出たら、rolllback
150
94
 
151
- end
95
+ p.query("rollback")
152
96
 
153
- if after_array #ここで、他の図書館に追加した情報もロールバックしたい。
97
+ }
154
98
 
155
- after_array.each {|p|
156
99
 
157
- after_array.query('ROLLBACK')
158
100
 
159
- }
101
+ end
160
102
 
161
- end
103
+ ```````
162
104
 
163
- return !result_flg
105
+ end #transaction end
164
-
165
- end
166
-
167
- end
168
-
169
- end
170
106
 
171
107
  ```