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

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

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

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

2179閲覧

【Rails】ActiveRecord::NotNullViolationのエラーでデータが保存されない

Rvato

総合スコア6

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/08 11:59

前提・実現したいこと

ポケモンのデータを1〜6匹入力し、パーティとして登録するアプリを作成中です。
必要データを入力しsubmitボタンを押下すると以下のエラーが発生します。このエラーを解決したいです。

▼ 開発環境
Rails 5.2.4.3
Mac OS

エラーメッセージ

イメージ説明

該当のソースコード

▼ routes.rb

Rails.application.routes.draw do root to: 'tops#index' resources :parties, only: [:index, :new, :create, :edit, :update, :destroy] do resources :pokemons, only: [:new, :create] end end

▼ pokemon.rb

class Pokemon < ApplicationRecord has_one :current_status has_one :base_status has_one :effort_value belongs_to :party accepts_nested_attributes_for :current_status accepts_nested_attributes_for :base_status accepts_nested_attributes_for :effort_value end

▼ party.rb

class Party < ApplicationRecord has_many :pokemons accepts_nested_attributes_for :pokemons validates :party_name, presence: true end

▼ pokemons_controller

class PokemonsController < ApplicationController def new @pokemon = Pokemon.new end def create @pokemon = Pokemon.new(pokemon_params) end private def pokemon_params params.permit( :pokemon_id, :name, :nickname, :gender, :ability, :nature, :item, :move1, :move2, :move3, :move4, current_status_attributes:[:cs_hp, :cs_attack, :cs_defense, :cs_special_attack, :cs_special_defense, :cs_speed], base_status_attributes: [:bs_hp, :bs_attack, :bs_defense, :bs_special_attack, :bs_special_defense, :bs_speed], effort_value_attributes: [:ev_hp, :ev_attack, :ev_defense, :ev_special_attack, :ev_special_defense, :ev_speed] ) end end

▼ parties_controller

class PartiesController < ApplicationController def index end def new @party = Party.new @party.build_pokemon end def create @party = Party.new(party_params) if @party.save redirect_to root_path, notice: 'パーティを作成しました' else render :new end end def show @party = Party.find(params[:id]) end def edit @party = Party.find(params[:id]) end def update @party = Party.find(params[:id]) end def destroy @party = Party.find(params[:id]) end private def party_params params.permit( :party_id, :party_name, pokemons_attributes:[:pokemon_id, :name, :nickname, :gender, :ability, :nature, :item, :move1, :move2, :move3, :move4] ) end end

▼ _party.html.haml

haml

1= form_with model: @party, local: true, class: "party-register" do |f| 2 .party 3 .party__wrap 4 5 .party__wrap__top 6 7 -# ------------------------ 1匹目 ------------------------ #- 8 .party__wrap__top__pokemon1 9 .pokemon-container 10 = icon 'fas', 'angle-double-down', class: "angle-double-down-icon" 11 1st 12 .pokemon-container__top 13 -# ---- ポケモン ---- #- 14 .pokemon-container__top__name 15 .label-name 16 ポケモン 17 .form-name 18 = f.text_field :name, class: "form-name__input", maxlength: "6", type: "text", autocomplete: "off" 19 -# ---- ニックネーム ---- #- 20 .pokemon-container__top__nickname 21 .label-nickname 22 ニックネーム 23 .form-nickname 24 = f.text_field :nickname, class: "form-nickname__input", maxlength: "12", type: "text", autocomplete: "off" 25 -# ---- 性別 ---- #- 26 .pokemon-container__top__gender 27 .label-gender 28 性別 29 .form-gender 30 %select{ name: "exp_gender", type: "text", class: "form-gender__input", id: "exp_gender" } 31 %option{ value: "" } ---- 32 %option{ value: "1" }33 %option{ value: "2" }34 %option{ value: "3" } 不明 35 36------------ 中略 ------------ 37 38 .party-name 39 パーティ名 40 = f.text_field :party_name, class: "party-name__input", maxlength: "6", type: "text", autocomplete: "off" 41 42 .register-btn 43 .register-btn__text 44 = f.submit "登録する", class: "register-btn__text__submit"

▼ DB(pokemonsテーブルとpartiesテーブルのみ)

## pokemons table |Column |Type |Options | |-----------|----------|-----------| |pokemon_id |string |null: false| |name |string |null: false| |nickname |string | | |gender |string |null: false| |ability |string |null: false| |nature |string |null: false| |item |string | | |move1 |string |null: false| |move2 |string | | |move3 |string | | |move4 |string | | ### Association - has_one :current_status - has_one :base_status - has_one :effort_value - belongs_to :party ## parties table |Column |Type |Options | |-----------|----------|-----------| |party_id |string |null: false| |party_name |string |null: false| ### Association - has_many :pokemons

補足情報

▼ 参考記事/質問
【Rails】1つのform_forで複数モデルへデータ登録をする方法

▼ 質問履歴
【Rails】ActionController::ParameterMissingが表示されデータが保存されない
【Rails】form_withのsubmitボタンが反応しない

▼ 仮説と検証作業の結果
調べているうちにform_withを使用する際にfields_forが使えるのか(form_forでは使える)という点と、エラー文からparty_idが無いと言われているので単純にDBから消せばいいのかという点がわからない状態です。
何か気づきがありましたらご意見頂戴したいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

この Party って 政治資金パーティーとかダンスパーティーとかのでなく、労働党とかK1登山の仲間とかのパーティーなんですね? Party と Userとが1:多なのでしばらく悩んでました。

それはさておき、なんかおかしいです。
viewの f.text_field :name という書き方なら params[:party][:name] になるはずが、貼り付けられた画像を見ると params[:name] になってます。
エラーとソースは一致してますか?

エラーの直接原因は party_params で params.permit( :party_id,)
となっているからです。partyには id はありますが parety_id はないです(大抵の場合は)。また、 id は自動付与されるものですから new には入れません。

投稿2020/09/08 12:53

winterboum

総合スコア23331

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

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

Rvato

2020/09/09 07:40

ご回答ありがとうございます。 Party≒グループ的な意味合い、でした。わかりづらくてすみません。 > エラーとソースは一致してますか? 一致しているはずです。 原因追及ありがとうございます。idの自動付与を失念していました… よってエラー内容は解決できました。
winterboum

2020/09/09 09:29

> Party≒グループ的な意味合い、でした。わかりづらくてすみません いえいえこちらの英語力の問題です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問