前提・実現したいこと
ポケモンのデータを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から消せばいいのかという点がわからない状態です。
何か気づきがありましたらご意見頂戴したいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/09 07:40
2020/09/09 09:29