Rails5.1.3でWebアプリケーション制作の勉強中です。データを更新するコードを試しているのですがどうしても上手くいかないので
どなたか教えていただけないでしょうか? ページの表示は出来ていますがデータの取り込み方法についての質問です。
やりたいことは、編集した内容を確認画面に取り込み、そのデータを更新するということです。
現状は以下のようになっております。
1,編集ページに現在のデータは表示されています。(取り込めています。)
2,「確認画面へ進む」をクリックすると確認画面が表示されています。
3,「更新」をクリックで「アカウントを更新しました」と表示される。
動きとしては思った通りに表示出来ています。(ページの表示だけです。)
しかし、データの更新ができないのです。問題は編集ページで更新した内容が確認画面に反映させず、確認画面にも初期データが
表示されているので更新できないのでは?と思っています。編集した内容を確認画面で取り込む(表示させる)→ 更新する には
どうしたらいいかわかりませんのでどなたか教えていただけないでしょうか?
・編集ページの表示は edit アクション
・確認画面ページの表示は confirm アクション
・更新は update アクション
コードは以下になります。
edit.html.erb <% @title = '口座アカウントの編集' %> <h1><%= @title %></h1> <div id="generic-form"> <%= form_for @bank_form, as: 'form', url: :confirm_customer_bank do |f| %> <%= render 'form', f: f %> <div class="buttons"> <%= f.submit '確認画面へ進む' %> <%= link_to 'キャンセル', :customer_root %> </div> <% end %> </div>
confirm.html.erb <% @title = '口座アカウントの更新(確認)' %> <h1><%= @title %></h1> <div id="generic-form"> <%= form_for @bank_form, as: 'form', url: :customer_bank do |f| %> <p>以下の内容で口座アカウントを更新します。よろしいですか?</p> <%= render 'confirming_form', f: f %> <div class="buttons"> <%= f.submit '更新' %> <%= f.submit '訂正', name: 'correct' %> </div> <% end %> </div>
_confirming_form.html.erb <fieldset id="bank-fields"> <legend>口座アカウント更新内容</legend> <%= render 'bank_fields', f: f, confirming: true %> </fieldset>
_form.html.erb <%= FormPresenter.new(f, self).notes %> <fieldset id="Bank-fields"> <legend>口座情報(正確に入力してください。)</legend> <%= render 'bank_fields', f: f, confirming: false %> </fieldset>
confirming_bank_form_presenter.rb class ConfirmingBankFormPresenter < ConfirmingFormPresenter def bk_name_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m.div(object.send(name), class: 'field-value') m << hidden_field(name, options) end end def office_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m.div(object.send(name), class: 'field-value') m << hidden_field(name, options) end end def account_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m.div(object.send(name), class: 'field-value') m << hidden_field(name, options) end end def acc_name_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m.div(object.send(name), class: 'field-value') m << hidden_field(name, options) end end def acc_name_kana_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m.div(object.send(name), class: 'field-value') m << hidden_field(name, options) end end end
以上ですが、confirming_bank_form_presenter.rb の m.div(object.send(name), class: 'field-value') のコードで確認画面にデータが表示されているのですが、編集した内容ではなく初期データが表示されてしまいます。どう記述すれば「編集」画面の内容を表示できるのでしょうか?
どなたか教えてください。宜しくお願いします。
追記
bank_form.rb class Customer::BankForm include ActiveModel::Model attr_accessor :bank delegate :persisted?, :valid?, :save, to: :bank def initialize(bank = nil) @bank = bank @bank ||= Bank.new @customer.build_bank unless @bank end def assign_attributes(params = {}) @params = params end
追記
_bank_fields.html.erb <%= f.fields_for :bank, f.object.bank do |ff| %> <%= markup do |m| p = confirming ? ConfirmingBankFormPresenter.new(ff, self) : BankFormPresenter.new(ff, self) p.with_options(required: true) do |q| m << q.bk_name_block(:bk_name, '銀行名') m << q.office_block(:office, '支店名') m << q.account_block(:account, '口座番号') m << q.acc_name_block(:acc_name, '口座名義') m << q.acc_name_kana_block(:acc_name_kana, '口座名義(フリガナ)') end end %> <% end %>
追記
edit.html.erbが表示されたときの出力 Started PATCH "/mypage/bank" for 10.0.2.2 at 2017-10-18 12:23:34 +0000 Processing by Customer::BanksController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"1chV0w0pxy53uFHxymlrUDzu1aIlq ZXWPIvFui2YXpqKCfbAUqls2Yob43UadjW4nw7tfWWIupT+5v/+BCNv4Q==", "form"=>{"bank"=>{ "bk_name"=>"xyz銀行", "office"=>"いろは支店", "account"=>"1234567", "acc_name"=> "佐藤一郎", "acc_name_kana"=>"サトウイチロウ"}}, "correct"=>"訂正", "host"=>"exa mple.com"} confirm.html.erbの表示されたときの出力 Started PATCH "/mypage/bank/confirm" for 10.0.2.2 at 2017-10-18 12:23:52 +0000 Processing by Customer::BanksController#confirm as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"hiE+QpQjqQQexMF03G2OxsTuf17oA dwxcT8npHiH3HPZ4J1Ry6MC8+Nnc/AMctAuZw5Hgagg83OzUh3gUTztCA==", "form"=>{"bank"=>{ "bk_name"=>"xyz銀行fd", "office"=>"いろは支店", "account"=>"1234567", "acc_name" =>"佐藤一郎", "acc_name_kana"=>"サトウイチロウ"}}, "commit"=>"確認画面へ進む", " host"=>"example.com"}
bk_nameを編集した時の出力です。これを見る限りデータは送られてきているのかな?って思いますが表示は編集前の値です。
追記
def confirm @bank_form = Customer::BankForm.new(Bank.find_by(customer_id: current_customer.id)) @bank_form.assign_attributes(params[:form][:bank][:bk_name]) @bank_form.assign_attributes(params[:form][:bank][:office]) @bank_form.assign_attributes(params[:form][:bank][:account]) @bank_form.assign_attributes(params[:form][:bank][:acc_name]) @bank_form.assign_attributes(params[:form][:bank][:acc_name_kana]) if @bank_form.valid? render action: 'confirm' else flash.now.alert = '入力に誤りがあります。' render action: 'edit' end end def create end def update @bank_form = Customer::BankForm.new(Bank.find_by(customer_id: current_customer.id)) @bank_form.assign_attributes(params[:form][:bank][:bk_name]) @bank_form.assign_attributes(params[:form][:bank][:office]) @bank_form.assign_attributes(params[:form][:bank][:account]) @bank_form.assign_attributes(params[:form][:bank][:acc_name]) @bank_form.assign_attributes(params[:form][:bank][:acc_name_kana]) if params[:commit] if @bank_form.save flash.notice = '口座アカウントを更新しました。' redirect_to :customer_root else flash.now.alert = '入力に誤りがあります。' render action: 'edit' end else render action: 'edit' end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/18 11:30
2017/10/19 07:55
2017/10/24 05:40