質問編集履歴

2

コードを追加しました。

2017/09/20 01:45

投稿

koume
koume

スコア458

test CHANGED
File without changes
test CHANGED
@@ -437,3 +437,49 @@
437
437
  編集した内容が反映されず編集前の内容が表示されてしまうのでどう記述すれば反映されるのかわからなくて困っています。
438
438
 
439
439
  お手数をおかけしますが教えていただけないでしょうか?お願いします。
440
+
441
+
442
+
443
+ 追記: 画面を切り換え時の表示コードも追記させていただきます。
444
+
445
+ ```ここに言語を入力
446
+
447
+ _bank_fields.html.erb
448
+
449
+
450
+
451
+ <%= f.fields_for :bank, f.object.bank do |ff| %>
452
+
453
+ <%= markup do |m|
454
+
455
+ p = confirming ? ConfirmingBankFormPresenter.new(ff, self) :BankFormPresenter.new(ff, self)
456
+
457
+ p.with_options(required: true) do |q|
458
+
459
+ m << q.bk_name_block(:bk_name, '銀行名')
460
+
461
+ m << q.office_block(:office, '支店名')
462
+
463
+ m << q.account_block(:account, '口座番号')
464
+
465
+ m << q.acc_name_block(:acc_name, '口座名義')
466
+
467
+ m << q.acc_name_kana_block(:acc_name_kana, '口座名義(フリガナ)')
468
+
469
+ end
470
+
471
+ end %>
472
+
473
+ <% end %>
474
+
475
+
476
+
477
+ ```
478
+
479
+ BankFormPresenter.new(ff, self) が最初の画面用です。
480
+
481
+ ConfirmingBankFormPresenter.new(ff, self)が確認画面用です。
482
+
483
+
484
+
485
+ なので1行目の<%= f.fields_for :bank, f.object.bank do |ff| %>が原因で表示内容がおかしいのかな?とも考えています。

1

コード、画面を追加しました。

2017/09/20 01:45

投稿

koume
koume

スコア458

test CHANGED
File without changes
test CHANGED
@@ -93,3 +93,347 @@
93
93
  ```
94
94
 
95
95
  各メソッドに同じコードを記述していますが 参考書の内容をそのまま記述していて m.div(object.send(name), class: 'field-value') のコードの意味が読み取れない(意味がわからない)のでどなたか意味を教えていただけないでしょうか?
96
+
97
+
98
+
99
+ 追記: 表示したい画面の内容とコードです。
100
+
101
+ 編集画面が表示されていて、この画面で編集します。
102
+
103
+ ![イメージ説明](d3ef453102fedc16974cb59622463f51.png)
104
+
105
+ この画面を表示するコードは以下になります。
106
+
107
+ ```ここに言語を入力
108
+
109
+ edit.html.erbのコードです。
110
+
111
+
112
+
113
+ <% @title = '口座アカウントの編集' %>
114
+
115
+ <h1><%= @title %></h1>
116
+
117
+
118
+
119
+ <div id="generic-form">
120
+
121
+ <%= form_for @bank_form, as: 'form', url: :confirm_customer_bank do |f| %> #confirmアクションへ
122
+
123
+ <%= render 'form', f: f %>
124
+
125
+ <div class="buttons">
126
+
127
+ <%= f.submit '確認画面へ進む' %>
128
+
129
+ <%= link_to 'キャンセル', :customer_root %>
130
+
131
+ </div>
132
+
133
+ <% end %>
134
+
135
+ </div>
136
+
137
+
138
+
139
+ ```
140
+
141
+ ```ここに言語を入力
142
+
143
+ class BankFormPresenter < FormPresenter
144
+
145
+ def bk_name_block(name, label_text, options = {})
146
+
147
+ markup(:div, class: 'input-block') do |m|
148
+
149
+ m << decorated_label(name, label_text, options)
150
+
151
+ m << text_field(name, options)
152
+
153
+ m << error_messages_for(name)
154
+
155
+ end
156
+
157
+ end
158
+
159
+
160
+
161
+ def office_block(name, label_text, options = {})
162
+
163
+ markup(:div, class: 'input-block') do |m|
164
+
165
+ m << decorated_label(name, label_text, options)
166
+
167
+ m << text_field(name, options)
168
+
169
+ m << error_messages_for(name)
170
+
171
+ end
172
+
173
+ end
174
+
175
+
176
+
177
+ def account_block(name, label_text, options = {})
178
+
179
+ markup(:div, class: 'input-block') do |m|
180
+
181
+ m << decorated_label(name, label_text, options)
182
+
183
+ m << text_field(name, options)
184
+
185
+ m.span ' (普通預金口座番号のみ)', class: 'notes'
186
+
187
+ m << error_messages_for(name)
188
+
189
+ end
190
+
191
+ end
192
+
193
+
194
+
195
+ def acc_name_block(name, label_text, options = {})
196
+
197
+ markup(:div, class: 'input-block') do |m|
198
+
199
+ m << decorated_label(name, label_text, options)
200
+
201
+ m << text_field(name, options)
202
+
203
+ m.span ' (本人名以外は無効です。)', class: 'notes'
204
+
205
+ m << error_messages_for(name)
206
+
207
+ end
208
+
209
+ end
210
+
211
+
212
+
213
+ def acc_name_kana_block(name, label_text, options = {})
214
+
215
+ markup(:div, class: 'input-block') do |m|
216
+
217
+ m << decorated_label(name, label_text, options)
218
+
219
+ m << text_field(name, options)
220
+
221
+ m.span ' (カタカナで入力してください。)', class: 'notes'
222
+
223
+ m << error_messages_for(name)
224
+
225
+ end
226
+
227
+ end
228
+
229
+ end
230
+
231
+
232
+
233
+ ```
234
+
235
+ 次に確認画面へ進む をクリックし確認画面に進みます。
236
+
237
+ ```ここに言語を入力
238
+
239
+ confirm.html.erb
240
+
241
+
242
+
243
+ <% @title = '口座アカウントの更新(確認)' %>
244
+
245
+ <h1><%= @title %></h1>
246
+
247
+
248
+
249
+ <div id="generic-form">
250
+
251
+ <%= form_for @bank_form, as: 'form', url: :customer_bank do |f| %> # updateアクションへ
252
+
253
+ <p>以下の内容で口座アカウントを更新します。よろしいですか?</p>
254
+
255
+ <%= render 'confirming_form', f: f %>
256
+
257
+ <div class="buttons">
258
+
259
+ <%= f.submit '更新' %>
260
+
261
+ <%= f.submit '訂正', name: 'correct' %>
262
+
263
+ </div>
264
+
265
+ <% end %>
266
+
267
+ </div>
268
+
269
+
270
+
271
+ ```
272
+
273
+ ![イメージ説明](423ed40ede1968c252acef597dbeb27f.png)
274
+
275
+ 質問したコードは確認画面の内容を表示するコードです。(上記画面の内容を表示するコード)
276
+
277
+
278
+
279
+ コントローラのコードは以下になります。
280
+
281
+ ```ここに言語を入力
282
+
283
+
284
+
285
+ class Customer::BanksController < Customer::Base
286
+
287
+
288
+
289
+ def show
290
+
291
+ @bank = current_customer
292
+
293
+ @bank = Bank.find_by(customer_id: current_customer.id)
294
+
295
+ end
296
+
297
+
298
+
299
+ def new
300
+
301
+ @bank_form = Customer::BankForm.new
302
+
303
+ end
304
+
305
+
306
+
307
+ def edit
308
+
309
+ @bank_form = current_customer
310
+
311
+ end
312
+
313
+
314
+
315
+ # PATCH
316
+
317
+ def confirm
318
+
319
+ @bank_form = current_customer
320
+
321
+ @bank_form.assign_attributes(bank_params)
322
+
323
+ if @bank_form.valid?
324
+
325
+ render action: 'confirm'
326
+
327
+ else
328
+
329
+ flash.now.alert = '入力に誤りがあります。'
330
+
331
+ render action: 'edit'
332
+
333
+ end
334
+
335
+ end
336
+
337
+
338
+
339
+ def create
340
+
341
+ end
342
+
343
+
344
+
345
+ def update
346
+
347
+ @bank_form = current_customer
348
+
349
+ @bank_form.assign_attributes(bank_params)
350
+
351
+ if @bank_form.save
352
+
353
+ flash.notice = '口座アカウントを更新しました。'
354
+
355
+ redirect_to :customer_root
356
+
357
+ else
358
+
359
+ flash.now.alert = '入力に誤りがあります。'
360
+
361
+ render action: 'edit'
362
+
363
+ end
364
+
365
+ else
366
+
367
+ render action: 'edit'
368
+
369
+ end
370
+
371
+ end
372
+
373
+
374
+
375
+ private
376
+
377
+ def bank_params
378
+
379
+ params.permit(bank: [:bk_name, :office, :account, :acc_name, :acc_name_kana])
380
+
381
+ end
382
+
383
+ end
384
+
385
+
386
+
387
+ ```
388
+
389
+
390
+
391
+ ここでハマってしまいました。 m.div(object.send(name), class: 'field-value') の部分で入力部分の表示を
392
+
393
+ しているようなのですが、編集した内容を確認画面でそのまま表示したいのに、編集内容が反映されず編集前の内容が表示されてしまいます。
394
+
395
+ 内容を編集し[確認画面へ進む]をクリックしたときのコンソール出力は以下になっています。
396
+
397
+ ```ここに言語を入力
398
+
399
+ Started PATCH "/mypage/bank/confirm" for 10.0.2.2 at 2017-09-19 23:44:54 +0000
400
+
401
+ Processing by Customer::BanksController#confirm as HTML
402
+
403
+ Parameters: {"utf8"=>"✓", "authenticity_token"=>"hlHOVUkOea6sdbVpupNfYxiFV81cQFoKbsxbs09zv+wXPcOxLxgj+MdD4qwUHJ24cM5v+53yq0gsuhS4Rh+8Yw==",
404
+
405
+ "form"=>{"bank"=>{"bk_name"=>"ABC銀行", "office"=>"いろは支店", "account"=>"1234567", "acc_name"=>"佐々木一郎",
406
+
407
+ "acc_name_kana"=>"サトウイチロウ"}}, "commit"=>"確認画面へ進む", "host"=>"example.com"}
408
+
409
+ Customer Load (0.9ms) SELECT `customers`.* FROM `customers` WHERE `customers`.`id` = 1 LIMIT 1
410
+
411
+ Unpermitted parameters: :utf8, :_method, :authenticity_token, :form, :commit, :host
412
+
413
+ Customer Exists (0.7ms) SELECT 1 AS one FROM `customers` WHERE `customers`.`email_for_index` = BINARY 'sato.ichiro@example.jp' AND (`customers`.`id` != 1) LIMIT 1
414
+
415
+ Rendering customer/banks/confirm.html.erb within layouts/customer
416
+
417
+ Bank Load (0.5ms) SELECT `banks`.* FROM `banks` WHERE `banks`.`customer_id` = 1 LIMIT 1
418
+
419
+ Rendered customer/banks/_bank_fields.html.erb (162.4ms)
420
+
421
+ Rendered customer/banks/_confirming_form.html.erb (166.0ms)
422
+
423
+ Rendered customer/banks/confirm.html.erb within layouts/customer (169.2ms)
424
+
425
+ Rendered customer/shared/_header.html.erb (1.5ms)
426
+
427
+ Rendered shared/_footer.html.erb (0.4ms)
428
+
429
+ Completed 200 OK in 520ms (Views: 485.2ms | ActiveRecord: 2.1ms)
430
+
431
+
432
+
433
+ ```
434
+
435
+ *口座名を佐藤一郎から佐々木一郎へ変更してから確認画面へ進んでも表示は佐藤一郎のままなのです。
436
+
437
+ 編集した内容が反映されず編集前の内容が表示されてしまうのでどう記述すれば反映されるのかわからなくて困っています。
438
+
439
+ お手数をおかけしますが教えていただけないでしょうか?お願いします。