在 Rails 中,如何为协会的批量 adding/editing 协会设置表单?

In Rails, how do I setup form for bulk adding/editing associations of an association?

也许我的设置不正确,我会尝试概述整个模型设计以防万一。

我有以下型号,[1] Player, [2] Game, [3] Participation, [4] Workout, [5] Measurable

玩家

class Player < ActiveRecord::Base

  has_many :workouts
  has_many :measurables, through: :workouts
  has_many :participations
  has_many :games

end

游戏

class Game < ActiveRecord::Base

  has_one  :workout
  has_many :participations

end

参与

class Participation < ActiveRecord::Base

  belongs_to :player
  belongs_to :game

end

锻炼

class Workout < ActiveRecord::Base

  belongs_to :player
  has_many   :measurables

end

可测量

class Measurable < ActiveRecord::Base

  belongs_to :workout

end

路线

resources :players do
  scope module: :players do
    resources :workouts
  end
end

如路线所示,我目前将锻炼作为我的球员模型的嵌套资源。这在当时是有道理的,对我来说仍然有点道理。一次训练可以由一名球员或多名球员组成。我现在遇到的问题是我想通过我的游戏资源一次 add/edit 许多锻炼的可衡量指标。我该如何处理这种情况?我是否只是向我的 views/games 添加一个页面,向我的 games_controller 添加一个新动作,然后将 accepts_nested_attributes 添加到我的游戏模型?如果是这样的话,我的 games_controller 上的强参数是如何构建的?由于我需要允许可衡量指标被接受,这是游戏协会的协会?

Do I just add a page to my views/games, a new action to my games_controller, and then add accepts_nested_attributes for to my game model?

这取决于您的用户界面。如果您想将可衡量指标与游戏一起发送给您,那么这是可行的方法。但是,如果您想单独添加可测量值,则需要 Games::MeasureablesController。

If that's the case how are the strong parameters constructed on my games_controller?

强参数通常与 Active Record 无关。这只是一个规则。必须允许发送到 ActiveRecord 的每个参数对象。 所以你可以为每个对象类型编写多个参数允许方法,然后像这样传递它们。

Game.create(game_params, measurables: measurables_params)

我还从文档中看到您可以允许嵌套参数 参见 http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit

def game_params
  params.require(:game).permit(:name, :level, measureables: [:fps, :ping])
end