也许我的设置不正确,我会尝试概述整个模型设计,以防万一。
我有以下型号,[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
如路线所示,我目前将锻炼作为我的球员模型的嵌套资源。 这在当时是有道理的,对我来说仍然如此。锻炼可以由一个玩家或多个玩家组成。 我现在遇到的问题是我想通过我的游戏资源一次添加/编辑许多锻炼的可测量值。 我该如何处理这种情况?我是否只是向视图/游戏添加一个页面,向games_controller添加一个新操作,然后将 accepts_nested_attributes 添加到我的游戏模型中? 如果是这种情况,如何在我的games_controller上构建强参数? 既然我需要允许接受可测量量,那么这是游戏协会的关联?
我是否只是向视图/游戏添加一个页面,向games_controller添加一个新操作,然后将 accepts_nested_attributes 添加到我的游戏模型中?
这取决于您的用户界面。如果您想将可测量值与游戏一起发送,那么这就是您要走的路。但是,如果要单独添加可测量对象,则需要Games::MeasureablesController。
如果是这种情况,如何在我的games_controller上构建强参数?
强参数通常与活动记录无关。这只是一条规则。必须允许发送到活动记录的每个参数对象。因此,您可以为每个对象类型编写多个参数允许方法,然后像这样传递它们。
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