Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 访问params[]值内的参数数组_Ruby On Rails_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 访问params[]值内的参数数组

Ruby on rails 访问params[]值内的参数数组,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我有以下参数: 参数:{“utf8”=>“✓", “真实性令牌”=>“06Us9R1wCPCJsD06TN7KIV/2ZeH4dJlZVqc12gpKBbo=“, “运行”=>{“盒id”=>“1”},“磁带”=>{“1”=>{“磁带id”=>“1”}, “2”=>{“磁带id”=>“2”},“3”=>{“磁带id”=>“3”}},“提交”=>“创建运行”} 我想创建一个盒子id为1的新“运行”,然后将磁带1、2和3与盒子id为1的该运行相关联 我不确定什么代码需要进入控制器,我尝试过: d

我有以下参数:

参数:{“utf8”=>“✓", 
“真实性令牌”=>“06Us9R1wCPCJsD06TN7KIV/2ZeH4dJlZVqc12gpKBbo=“,
“运行”=>{“盒id”=>“1”},“磁带”=>{“1”=>{“磁带id”=>“1”},
“2”=>{“磁带id”=>“2”},“3”=>{“磁带id”=>“3”}},“提交”=>“创建运行”}
我想创建一个盒子id为1的新“运行”,然后将磁带1、2和3与盒子id为1的该运行相关联

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

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

  @run.save
当我提交下面的表单时,它会使用正确的框创建一个新的运行,但不会将磁带与之关联

<%= form_for(@run) do |f| %>
  <% if @run.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@run.errors.count, "error") %> prohibited this tape
        from being saved:
      </h2>

      <ul>
        <% @run.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :box_id %>
    <br/>
    <%= f.text_field :box_id %>
  </div>

  <% (1..3).each do |index| %>
    <%= fields_for :tapes do |ff| %>

      <div class="field">
        <%= ff.label :tape_id , :index => index%>
        <%= ff.text_field :tape_id, :index => index %>
      </div>

    <% end %>
  <% end %>


  <div class="actions">
    <%= f.submit %>
  </div>
<% end %> 

禁止播放这盘磁带
从被保存开始:

索引%> 索引%>
如果您没有执行
接受嵌套的属性,那么这可能会起作用。我不知道
构建磁带
应该做什么,但下面将为您提供一组磁带ID:

@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

在您的运行模型中,您是否使用
接受磁带的\u嵌套\u属性\u
?为什么不使用嵌套形式作为磁带\u ID?@hcK我可以这样做,运行模型是磁带和盒子的连接模型。我已经有一个磁带和盒子列表,我需要创建一个表单,您可以将24个现有磁带关联到一个盒子,因此我理解嵌套形式是用于c的创建新对象。build_tape应该做什么?它作为一个参数应该是什么?您好,有点晚了,但这在我不久前进行此工作时对我有所帮助,谢谢。迟做总比不做好。:)很高兴它有帮助!