Ruby on rails 父母和关系中所有子女的单一表格?

Ruby on rails 父母和关系中所有子女的单一表格?,ruby-on-rails,ruby,nested-attributes,Ruby On Rails,Ruby,Nested Attributes,在我的RoR中,我有一个表游戏,统计,和玩家。每个游戏都有许多玩家,每个玩家都有许多“统计数据”,每个游戏都有许多统计数据通过玩家。我想做的是在我的编辑游戏表单中,我想有一行字段来添加新的统计数据行,游戏中每个玩家都有一行。我已经读了很多关于嵌套的属性的书,但是我发现了一些新的好资源,比如如何完全做到这一点 在没有看到更多你自己的代码的情况下,我无法具体说明,但基本上,你可以循环所有玩家并“构建”统计数据。。。game.players.each{| p | p.build_stat}然后在表

在我的RoR中,我有一个表
游戏
统计
,和
玩家
。每个游戏都有许多
玩家,
每个玩家都有许多“统计数据”,每个游戏都有许多
统计数据
通过
玩家。
我想做的是在我的编辑游戏表单中,我想有一行字段来添加新的统计数据行,游戏中每个玩家都有一行。我已经读了很多关于嵌套的属性的书,但是我发现了一些新的好资源,比如如何完全做到这一点

在没有看到更多你自己的代码的情况下,我无法具体说明,但基本上,你可以循环所有玩家并“构建”统计数据。。。game.players.each{| p | p.build_stat}然后在表单中,再次循环所有玩家,并显示统计数据(可能限制为新的_记录?),或者在表单中正确构建,以便显示空白条目


我想我看到了一个潜在的问题,尽管你的模型。。。如果统计数据是特定游戏的特定表示,那么您描述的模型不会将它们链接起来-您需要在每个统计数据记录中包含游戏id和玩家id。如果是这种情况,您将在controller方法中构建所有stats,并在视图中循环它们。

更新:下面是一组基于您在注释中声明的新关联的更新类

# models/game.rb
class Game < ActiveRecord::Base
  has_many :teams
  accepts_nested_attributes_for :teams
  attr_accessible :name, :teams_attributes
end
#models/game.rb
类游戏

#models/team.rb
类团队

#models/player.rb
类播放器

#models/stat.rb
类Stat

#控制器/games_controller.rb
类GamesController

#games/edit.html.erb
小组:

玩家:



注意,这不会做任何ajax“添加另一个stat”或任何花哨的事情。它只是在每名球员的末尾多加一个空白区域。如果需要更多,您可以在
GamesController#edit
操作中构建更多空白stat对象,或者实现一些漂亮的javascript。希望这能让您离实际数据足够近。

我看到了这一点。它很相似,但不一样。在这个例子中,他们只是在子表中添加新行。我需要为团队拥有的每个玩家在子表(统计)中添加新行。你需要为每个统计显示一个表格吗,还是以某种方式进行计算?@Dmg是的,我需要为每个统计添加一个表格。你是正确的,所有统计都有一个游戏id和玩家id,接得好。首先谢谢你,有很多我以前不知道的新东西。现在让我来解释一些我最初向你们解释的错误。一场
游戏
有许多
团队
,而
团队
有许多
玩家
。因此,在
GamesController#edit
中,我将其更改为
@game.home\u team.players.each do | player | player.stats.build end
,我的视图中有两行代码导致了错误
未定义的方法“name”
统计信息:

知道是什么导致了这个错误吗?如果我的解释太混乱,请告诉我,因为您的
播放器
型号没有
名称
属性
只是提取FormBuilder对象在
玩家
集合上迭代时表示的当前玩家的名称。您需要将
.name
位更改为适合您的
播放器
型号的任何属性(可能是
全名
名字
fname
等)如果您仍然有问题,请告诉我是否需要我用新值更新我的答案。没有,确实有一个名称列。它是否在为
nil
说明
未定义的方法“name”
?完全的错误是什么?它只是说未定义的方法。我感谢你的帮助,我将做一些工作,并努力让它工作在我自己,谢谢我会张贴更多的问题,如果我不能成功
# models/team.rb
class Team < ActiveRecord::Base
  belongs_to :game
  has_many :players
  accepts_nested_attributes_for :players
  attr_accessible :name, :players_attributes
end
# models/player.rb
class Player < ActiveRecord::Base
  belongs_to :team
  has_many :stats
  accepts_nested_attributes_for :stats, reject_if: proc { |attributes| attributes['name'].blank? }
  attr_accessible :name, :stats_attributes
end
# models/stat.rb
class Stat < ActiveRecord::Base
  belongs_to :player
  attr_accessible :name
end
# controllers/games_controller.rb
class GamesController < ApplicationController
  def edit
    @game = Game.find(params[:id])
    @game.teams.each do |team|
      team.players.each do |player|
        player.stats.build
      end
    end
  end

  def update
    @game = Game.find(params[:id])
    if @game.update_attributes(params[:game])
      render "show"
    else
      render text: "epic fail"
    end
  end
end
# games/edit.html.erb
<%= form_for @game do |f| %>
  <%= f.fields_for :teams do |tf| %>
    <p>Team: <%= tf.object.name %></p>
    <%= tf.fields_for :players do |pf| %>
      <p>Player: <%= pf.object.name %></p>
      <%= pf.fields_for :stats do |sf| %>
        <%= sf.text_field :name %>
      <% end %>
    <% end %>
  <% end %>
  <%= f.submit %>
<% end %>