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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

2265閲覧

Railsで入力フォームからのデータを保存したいのですがエラーが出て保存できないので教えてください。

koume

総合スコア458

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2017/12/03 14:46

編集2017/12/03 14:50

Rails5.1.3でWebアプリケーション制作の勉強をしています。銀行の口座番号をcustomerテーブルに関連付けて保存したいのですが
ストロングパラメータのところでエラーが出てしまうので解決方法を教えていただけないでしょうか?
コードは以下のようになっております。

banks_controller.rb def create @customer = Customer.find_by(id: current_customer.id) @bank_form = Customer::BankForm.new @bank_form.assign_attributes(customer_id: current_customer.id) if @bank_form.save flash.notice = '口座情報を登録しました。' redirect_to action: 'show' else flash.now.alert = '入力に誤りがあります。' render actionn: 'new' end end
point.rb (モデル) class Point < ActiveRecord::Base belongs_to :customer end
new.html.erb <% @title = '口座の新規登録' %> <h1><%= @title %></h1> <div id="generic-form"> <%= form_for @bank_form, as: 'form', url: :customer_bank do |f| %> <%= render 'form', f: f %> <div class="buttons"> <%= f.submit '登録' %> <%= link_to 'キャンセル', :customer_root %> </div> <% end %> </div>
_form.html.erb <%= FormPresenter.new(f, self).notes %> <fieldset id="Bank-fields"> <legend>口座情報(正確に入力してください。)</legend> <%= render 'bank_fields', f: f, confirming: false %> </fieldset>
_bank_fielde.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 %>
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 bank.assign_attributes(bank_params) end private def bank_params @params.require(:bank).permit(:bk_name, :offics, :account, :acc_name, :acc_name_kana)-----ここでエラー発生 end end
エラー内容 NoMethodError in Customer::BanksController#create private method `require' called for {:customer_id=>92}:Hash Extracted source (around line #20): 18 private 19 def bank_params 20 @params.require(:bank).permit(:bk_name, :offics, :account, :acc_name, :acc_name_kana) 21 end 22 end app/forms/customer/bank_form.rb:20:in `bank_params' app/forms/customer/bank_form.rb:15:in `assign_attributes' app/controllers/customer/banks_controller.rb:44:in `create'

口座情報を登録する際に外部キーcustomer_idも登録したいのです。
今回の場合はcustomer_idを92にして保存したいのですが、解決できないので
どなたか教えていただけないでしょうか?宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

119 def bank_params 220 @params.require(:bank).permit(:bk_name, :offics, :account, 3 :acc_name, :acc_name_kana) 421 end

上記のストロングパラメーターにcustomer_idが入っていないからではないですか?

投稿2017/12/04 00:40

kenny_sayama

総合スコア1036

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

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

koume

2017/12/04 04:38

回答ありがとうございます。なるほどと思いcustomer_idを追記しましたが 同じエラーでした。別の原因みたいなのですがよくわかりませんので教えていただけないでしょうか?
kenny_sayama

2017/12/04 04:53

binding.pryを使って値を確認しつつ進めてみてはいかがでしょうか? アプリケーションの全体像を把握していないので、なんとも言えず... binding.pryを使ってどこまでの処理が実行出来ているのかを探し、実行出来ていないところの原因を探り直すといった感じです
koume

2017/12/04 08:16

回答ありがとうございます。binding.pryというのは初耳ですが勉強してみます。参考書を基にもう一度詳しく調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問