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

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

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

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

MySQL

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

1回答

683閲覧

【Ruby on Rails】saveメソッドを用いる際に、バリデーションを一切設定していない状態でバリデーションエラーが発生する

shota-imoto

総合スコア37

Ruby

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

MySQL

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2020/05/17 08:51

編集2020/05/17 09:00

前提

音楽のジャムセッションを支援するサービスを作っています。
楽器のチューニングの設定をするための機能を実装していて、詰まっています。

エラー画面の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>

##テーブルの構成
DB

#試したこと

  • 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を併用しています。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

modelが何も載せてないので想像になりますが
model TuningAll に belongs_to :user がありませんか?

投稿2020/05/17 08:57

winterboum

総合スコア23284

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

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

shota-imoto

2020/05/17 09:18

見落としていました。ご指摘ありがとうございます! DBにカラムを追加して、コントローラも少し書き換えたら本件のエラーがなくなりました。 別のエラーが出たので引き続き格闘していきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問