前提
音楽のジャムセッションを支援するサービスを作っています。
楽器のチューニングの設定をするための機能を実装していて、詰まっています。
エラー画面のSS
tuning_all、tuningという2つのレコードを同時に登録しようとして、1つ目のtuning_allを保存する段階でエラーが発生しています。
ソースコード
コントローラ tuning_alls_controller.rb
rails
1class TuningAllsController < ApplicationController 2 def new 3 @tuning_all = TuningAll.new 4 @tuning_all.tunings.build 5 end 6 7 def create 8 @tuning_all = TuningAll.new(tuning_all_params) 9 @tuning_all.save! 10 11 @tuning = Tuning.new(tuning_params[:tunings]) 12 @tuning.save! 13 end 14 15 private 16 17 def tuning_all_params 18 params.permit(:name, :instrument_id) 19 end 20 21 def tuning_params 22 params. permit(tunings:[:string_num, :note_name]).merge(tuning_all_id: params[:id]) 23 end 24end
ビュー views>tuning_alls>new.html.haml
このソース・ファイルのform_withによって前述のコントローラにデータが引き渡されます。
rails
1.content 2 =form_with url: tuning_alls_path, method: :post, local: true do |f| 3 .content__instrument-name 4 =f.text_field :instrument_name, id: "search_instrument_name", placeholder: "楽器名称" 5 =f.text_field :instrument_id, id: "selected_instrument_id", class: "form_blind" 6 .content__search-result 7 8 .content__strings 9 - 5.times do 10 =f.fields_for :tunings do |tuning| 11 .strings__string 12 =tuning.hidden_field :string_num, value: 5 13 =tuning.text_field :note_name, placeholder: "string" 14 .content__name 15 名称 16 =f.text_field :name 17 .content__btn 18 =f.submit "登録"
##バリデーションの設定
モデルへの記述
→なし
migrationファイルの設定
rails
1class CreateTuningAlls < ActiveRecord::Migration[5.2] 2 def change 3 create_table :tuning_alls do |t| 4 t.string :name, null: false 5 t.references :instrument, foreign_key: true 6 t.timestamps 7 end 8 end 9end
把握している値
save!直前の@tuning_allの値
=>#<TuningAll:0x00007fb56b916838
id: nil,
name: "u",
instrument_id: 1,
created_at: nil,
updated_at: nil>
paramsの値
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"NF4tm/JMzQ0T6RijzRRFXgtr3z54vy2EBfYO8vH0gN3fJfS2USkyY/CAtRvhiIj0gs352V5vbYR2s7+5jUh4MQ==", "instrument_name"=>"5strings banjo", "instrument_id"=>"1", "tunings"=>{"string_num"=>"5", "note_name"=>"i"}, "name"=>"u", "commit"=>"登録", "controller"=>"tuning_alls", "action"=>"create"} permitted: false>
tuning_all_paramsの出力
Unpermitted parameters: :utf8, :authenticity_token, :instrument_name, :tunings, :commit => <ActionController::Parameters {"name"=>"u", "instrument_id"=>"1"} permitted: true>
#試したこと
- null:falseとしているカラムにデータが保存されていないのではないか?
→前述のようにsave直前の@tuning_allの値を確認。問題なし。
- save直前の@tuning_allの状態の確認、ストロングパラメータが動作しているか?
→ストロングパラメータ用の関数を呼び出して確認。前述の通り、tuning_allに用いられる値はpermitされている。
#補足情報(FW/ツールのバージョンなど)
- ruby 2.5.1p57
- rails (5.2.4.2)
- haml (5.1.2)
- haml-rails (2.0.1)
- mysql2 (0.5.3)
- 他にjqueryとscssを併用しています。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/17 09:18