在 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
也许我的设置不正确,我会尝试概述整个模型设计以防万一。
我有以下型号,[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