前提・実現したいこと
ポケモンのデータを1〜6匹入力し、パーティ(グループ)として登録するアプリを作成中です。必要データを入力しsubmitボタンを押下してデータ登録を行います。
2つのモデルを使用するためfields_for
を使用します。
必要データを入力すると以下のエラーが発生します。このエラーを解決したいです。
▼ 開発環境
Rails 5.2.4.3
Mac OS
エラーメッセージ
該当/関連のソースコード
▼ _party.html.haml
haml
1= form_with model: @party, local: true, class: "party-register" do |f| 2 .party 3 4 .party__wrap 5 = f.fields_for :pokemons do |pokemon| 6 7 .party__wrap__top 8 -# ------------------------ 1匹目 ------------------------ #- 9 .party__wrap__top__pokemon1 10 .pokemon-container 11 = icon 'fas', 'angle-double-down', class: "angle-double-down-icon" 12 1st 13 .pokemon-container__top 14 -# ---- ポケモン ---- #- 15 .pokemon-container__top__name 16 .label-name 17 ポケモン 18 .form-name 19 = pokemon.text_field :name, class: "form-name__input", maxlength: "6", type: "text", autocomplete: "off" 20 -# ---- ニックネーム ---- #- 21 .pokemon-container__top__nickname 22 .label-nickname 23 ニックネーム 24 .form-nickname 25 = pokemon.text_field :nickname, class: "form-nickname__input", maxlength: "12", type: "text", autocomplete: "off" 26 -# ---- 性別 ---- #- 27 .pokemon-container__top__gender 28 .label-gender 29 性別 30 .form-gender 31 %select{ name: "exp_gender", type: "text", class: "form-gender__input", id: "exp_gender" } 32 %option{ value: "" } ---- 33 %option{ value: "1" } ♂ 34 %option{ value: "2" } ♀ 35 %option{ value: "3" } 不明 36 37------------ 中略 ------------ 38 39 .party-name 40 パーティ名 41 = f.text_field :party_name, class: "party-name__input", maxlength: "6", type: "text", autocomplete: "off" 42 43 .register-btn 44 .register-btn__text 45 = f.submit "登録する", class: "register-btn__text__submit"
▼ parties_controller
class PartiesController < ApplicationController def index end def new @party = Party.new @party.pokemon.build end def create @party = Party.new(party_params) @party.save redirect_to root_path, notice: 'パーティを作成しました' 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.require(:party).permit( :party_name, pokemons_attributes:[ :name, :nickname, :gender, :ability, :nature, :item, :move1, :move2, :move3, :move4, :cs_hp, :cs_attack, :cs_defense, :cs_special_attack, :cs_special_defense, :cs_speed, :bs_hp, :bs_attack, :bs_defense, :bs_special_attack, :bs_special_defense, :bs_speed, :ev_hp, :ev_attack, :ev_defense, :ev_special_attack, :ev_special_defense, :ev_speed ] ) end end
▼ pokemon.rb
class Pokemon < ApplicationRecord belongs_to :party end
▼ party.rb
class Party < ApplicationRecord has_many :pokemons accepts_nested_attributes_for :pokemons validates :party_name, presence: true end
補足情報
▼ 略称について
cs = current status現在のステータス
bs = base status種族値
ev = effort value努力値
▼ 参考記事/質問
複数モデルにデータを保存したい
fields_forの上手な使い方
▼ 質問履歴
【Rails】ActionController::ParameterMissingが表示されデータが保存されない
【Rails】form_withのsubmitボタンが反応しない
【Rails】ActiveRecord::NotNullViolationのエラーでデータが保存されない
【Rails】form_withでfields_forを使用したいがエラーが発生してページを表示できない
【Rails】1つのform_withで複数モデルへデータ登録をしたい
▼ 仮説と検証作業の結果
.require(:party)
の記述を消すとparty_nameは保存されるのですが、ポケモンの情報が一切 保存されません…。
検証ツールを覗いてみたところnameやidがコントローラのものと違うことがわかりました。この辺が怪しいです。(viewの修正意見も承ります)
思考停止で= pokemon.text_field :name
とかやっているので、ご教授いただけたら幸いです。
何か他に気づきがありましたらご意見頂戴したいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/16 08:51