我正在尝试构建一个表单来创建一个具有四个不同玩家实例的游戏。我建立了一个嵌套的窗体,该窗体将四组玩家字段渲染到游戏窗体。但是,当我提交表格时,什么也没有发生。我希望提交表单以调用控制器的#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的问题,所以如果我不清楚/是否需要提供更多信息,请让我知道。
谢谢!
问题是player_attributes
应该是
def family_params
params.require(:game).permit(:date, players_attributes: [:name])
end