Rails:嵌套表单未创建记录

问题描述 投票:0回答:1

我正在尝试构建一个表单来创建一个具有四个不同玩家实例的游戏。我建立了一个嵌套的窗体,该窗体将四组玩家字段渲染到游戏窗体。但是,当我提交表格时,什么也没有发生。我希望提交表单以调用控制器的#create动作,但它甚至不调用create(我试图在#create中引发错误,但不能)。

这是我的代码:

game.rb

class Game < ApplicationRecord
  has_many :players, dependent: :destroy
  has_many :rounds, dependent: :destroy

  accepts_nested_attributes_for :players
end

player.rb

class Player < ApplicationRecord
  belongs_to :game
  has_many :rounds
  validates :name, presence: true, length: { maximum: 15 }


end

games_controller.rb

class GamesController < ApplicationController

  def create
    raise
    @new_game = Game.new(game_params)
    @new_game.start = Date.today
    @new_game.save!
    redirect_to root_url
  end

  def new
     @game = Game.new
     4.times { @game.players.build }
   end

   private
     def set_game
       @game = Game.find(params[:id])
     end

     def family_params
       params.require(:game).permit(:date, player_attributes: [:name])
     end
end

views / games / new.rb

<%= form_with model: @game do |f| %>
  Players:
  <ul>
    <%= f.fields_for :players do |players_form| %>
      <li>
        <%= players_form.label :name %>
        <%= players_form.text_field :name %>
      </li>
    <% end %>
  <%= f.submit "Submit"%>
  </ul>
<% end %>

这是我第一次问有关stackoverflow的问题,所以如果我不清楚/是否需要提供更多信息,请让我知道。

谢谢!

ruby-on-rails ruby nested-forms
1个回答
0
投票

问题是player_attributes

应该是

def family_params
  params.require(:game).permit(:date, players_attributes: [:name])
end
© www.soinside.com 2019 - 2024. All rights reserved.