访问params 值内的参数数组

我有以下参数:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"06Us9R1wCPCJsD06TN7KIV/2ZeH4dJlZVqc12gpKBbo=", "run"=>{"box_id"=>"1"}, "tapes"=>{"1"=>{"tape_id"=>"1"}, "2"=>{"tape_id"=>"2"}, "3"=>{"tape_id"=>"3"}}, "commit"=>"Create Run"}} 

我想创建一个框ID为1的新“运行”,然后将磁带1 2和3关联到此运行,框ID为1

我不确定需要进入控制器的代码,我尝试过:

 def create @run = Run.new(params[:run]) @tape_ids = @run.build_tape(params[:run][:tapes]) @run.save 

当我提交下面的表单时,它会使用正确的框创建一个新的Run,但不会将磁带与它相关联。

   

prohibited this tape from being saved:


index%> index %>

如果您没有执行accepts_nested_attributes_for ,那么这可能会有效。 我不知道build_tape应该做什么,但是下面的内容将为您提供一系列tape_ids:

 @tape_ids = params[:run][:tapes].map { |k, v| v["tape_id"].to_i } 

要完成关联,您可以执行类似的操作

 params[:run][:tapes].each do |k, v| t = Tape.find(v["tape_id"].to_i) t.run = @run t.save end