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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

1回答

385閲覧

Railsのコードの意味を教えていただけませんでしょうか?

koume

総合スコア458

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

1クリップ

投稿2017/09/19 09:07

編集2022/01/12 10:55

Rails5.1.3でWebアプリケーション制作の勉強中です。参考書を見ながら、コードを少し変更したりして学習しております。
その中で、画面の表示関連のところで、思ったように表示してくれないのでここ3日ほど悩んでおります。
いろいろ調べているうちに m.div(object.send(name), class: 'field-value') のコードのところで思うように
表示してくれないようでした。一連のコードは以下になります。

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

各メソッドに同じコードを記述していますが 参考書の内容をそのまま記述していて m.div(object.send(name), class: 'field-value') のコードの意味が読み取れない(意味がわからない)のでどなたか意味を教えていただけないでしょうか?

追記: 表示したい画面の内容とコードです。
編集画面が表示されていて、この画面で編集します。
イメージ説明
この画面を表示するコードは以下になります。

edit.html.erbのコードです。 <% @title = '口座アカウントの編集' %> <h1><%= @title %></h1> <div id="generic-form"> <%= form_for @bank_form, as: 'form', url: :confirm_customer_bank do |f| %> #confirmアクションへ <%= render 'form', f: f %> <div class="buttons"> <%= f.submit '確認画面へ進む' %> <%= link_to 'キャンセル', :customer_root %> </div> <% end %> </div>
class BankFormPresenter < FormPresenter def bk_name_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m << text_field(name, options) m << error_messages_for(name) end end def office_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m << text_field(name, options) m << error_messages_for(name) end end def account_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m << text_field(name, options) m.span ' (普通預金口座番号のみ)', class: 'notes' m << error_messages_for(name) 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 << text_field(name, options) m.span ' (本人名以外は無効です。)', class: 'notes' m << error_messages_for(name) 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 << text_field(name, options) m.span ' (カタカナで入力してください。)', class: 'notes' m << error_messages_for(name) end end end

次に確認画面へ進む をクリックし確認画面に進みます。

confirm.html.erb <% @title = '口座アカウントの更新(確認)' %> <h1><%= @title %></h1> <div id="generic-form"> <%= form_for @bank_form, as: 'form', url: :customer_bank do |f| %> # updateアクションへ <p>以下の内容で口座アカウントを更新します。よろしいですか?</p> <%= render 'confirming_form', f: f %> <div class="buttons"> <%= f.submit '更新' %> <%= f.submit '訂正', name: 'correct' %> </div> <% end %> </div>

イメージ説明
質問したコードは確認画面の内容を表示するコードです。(上記画面の内容を表示するコード)

コントローラのコードは以下になります。

class Customer::BanksController < Customer::Base def show @bank = current_customer @bank = Bank.find_by(customer_id: current_customer.id) end def new @bank_form = Customer::BankForm.new end def edit @bank_form = current_customer end # PATCH def confirm @bank_form = current_customer @bank_form.assign_attributes(bank_params) if @bank_form.valid? render action: 'confirm' else flash.now.alert = '入力に誤りがあります。' render action: 'edit' end end def create end def update @bank_form = current_customer @bank_form.assign_attributes(bank_params) if @bank_form.save flash.notice = '口座アカウントを更新しました。' redirect_to :customer_root else flash.now.alert = '入力に誤りがあります。' render action: 'edit' end else render action: 'edit' end end private def bank_params params.permit(bank: [:bk_name, :office, :account, :acc_name, :acc_name_kana]) end end

ここでハマってしまいました。 m.div(object.send(name), class: 'field-value') の部分で入力部分の表示を
しているようなのですが、編集した内容を確認画面でそのまま表示したいのに、編集内容が反映されず編集前の内容が表示されてしまいます。
内容を編集し[確認画面へ進む]をクリックしたときのコンソール出力は以下になっています。

Started PATCH "/mypage/bank/confirm" for 10.0.2.2 at 2017-09-19 23:44:54 +0000 Processing by Customer::BanksController#confirm as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"hlHOVUkOea6sdbVpupNfYxiFV81cQFoKbsxbs09zv+wXPcOxLxgj+MdD4qwUHJ24cM5v+53yq0gsuhS4Rh+8Yw==", "form"=>{"bank"=>{"bk_name"=>"ABC銀行", "office"=>"いろは支店", "account"=>"1234567", "acc_name"=>"佐々木一郎", "acc_name_kana"=>"サトウイチロウ"}}, "commit"=>"確認画面へ進む", "host"=>"example.com"} Customer Load (0.9ms) SELECT `customers`.* FROM `customers` WHERE `customers`.`id` = 1 LIMIT 1 Unpermitted parameters: :utf8, :_method, :authenticity_token, :form, :commit, :host 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 Rendering customer/banks/confirm.html.erb within layouts/customer Bank Load (0.5ms) SELECT `banks`.* FROM `banks` WHERE `banks`.`customer_id` = 1 LIMIT 1 Rendered customer/banks/_bank_fields.html.erb (162.4ms) Rendered customer/banks/_confirming_form.html.erb (166.0ms) Rendered customer/banks/confirm.html.erb within layouts/customer (169.2ms) Rendered customer/shared/_header.html.erb (1.5ms) Rendered shared/_footer.html.erb (0.4ms) Completed 200 OK in 520ms (Views: 485.2ms | ActiveRecord: 2.1ms)

*口座名を佐藤一郎から佐々木一郎へ変更してから確認画面へ進んでも表示は佐藤一郎のままなのです。
編集した内容が反映されず編集前の内容が表示されてしまうのでどう記述すれば反映されるのかわからなくて困っています。
お手数をおかけしますが教えていただけないでしょうか?お願いします。

追記: 画面を切り換え時の表示コードも追記させていただきます。

_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 %>

BankFormPresenter.new(ff, self) が最初の画面用です。
ConfirmingBankFormPresenter.new(ff, self)が確認画面用です。

なので1行目の<%= f.fields_for :bank, f.object.bank do |ff| %>が原因で表示内容がおかしいのかな?とも考えています。

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

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

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

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

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

guest

回答1

0

今どういう表示なっていて、最終的にどういう表示にしたいのかが分からないので回答のしようがありません・・・

Ruby

1 def acc_name_kana_block(name, label_text, options = {}) 2 markup(:div, class: 'input-block') do |m| 3 m << decorated_label(name, label_text, options) 4 m.div(object.send(name), class: 'field-value') 5 m << hidden_field(name, options) 6 end 7 end

こちらはhtmlのdivタグとその中身を生成している処理だと思います。

投稿2017/09/19 14:18

mtdsnsk

総合スコア789

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

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

koume

2017/09/19 23:54

回答ありがとうございます。質問した理由とコード及び画面を追記編集させていただきました。 ご面倒をおかけしますが、宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問