如何解决嵌套表单无法保存,因为父级不存在
我有三堂课:球员,球队和游戏。
玩家组成一个团队,每个游戏都有多个团队互相竞争。
我有一个嵌套的表单,该表单应使用强大的参数一次性创建球员,团队和游戏。如果我仅创建游戏,或者甚至在创建游戏和团队时,这都可以工作。但是,一旦将玩家添加到混音中,整个操作就会失败,ActiveRecord::RecordInvalid (Validation failed: Players team must exist).
任何想法都会受到赞赏。
我的模型:
class Game < ApplicationRecord
has_many :teams
has_many :players,through: :teams
accepts_nested_attributes_for :teams,:players
end
class Team < ApplicationRecord
belongs_to :game
has_many :players
accepts_nested_attributes_for :players
end
class Player < ApplicationRecord
belongs_to :team
end
我的 GamesController :
class GamesController < ApplicationController
def new
@game = Game.new
@team = @game.teams.build
@player = @game.players.build
end
def create
@game = Game.new(game_params)
if @game.save
flash[:success] = "Booking successful!"
redirect_to root_path
else
render 'new'
end
end
private
def game_params
params.require(:game).permit(:start_time,teams_attributes: [:name],players_attributes: [:first_name])
end
end
最后,我的部分表格:
<%= form_with model: @game do |f| %>
<%= f.fields_for :players do |f_players| %>
<%= f_players.label :first_name %>
<%= f_players.text_field :first_name %>
<% end %>
<%= f.fields_for :teams do |f_teams| %>
<%= f_teams.label :name,"Team name" %>
<%= f_teams.text_field :name %>
<% end %>
<%= f.label :start_time,"Game date" %>
<%= f.date_field :start_time %>
<%= f.submit "Confirm" %>
<% end %>
解决方法
您正在尝试建立多个团队,每个团队都有多个玩家。但是,您正在尝试在同一级别上创建所有球员,因此Rails不知道他们应该加入哪个团队。
如果我们要长期这样做,我们将创建团队并列出其中的球员。
<%= form_with model: @game do |f| %>
<%= f.fields_for :teams do |f_teams| %>
<%= f_teams.label :name,"Team name" %>
<%= f_teams.text_field :name %>
<%= f_teams.fields_for :players do |f_players| %>
<%= f_players.label :first_name %>
<%= f_players.text_field :first_name %>
<% end %>
<% end %>
<%= f.label :start_time,"Game date" %>
<%= f.date_field :start_time %>
<%= f.submit "Confirm" %>
<% end %>
问题在于,团队和球员都需要允许1条以上的记录。为此,您需要使用JS添加新的团队或新的球员。 他们所连接的团队必须保留并验证。
您可能会发现这些文章很有帮助:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。