2011-10-16 16 views
1

我有以下參數:訪問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"}} 

我想創建一個新的「運行」爲1的盒ID,然後建立關聯的帶1 2和3與1

盒ID此運行,我不知道是什麼代碼需要去到控制器中,我曾嘗試:

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 %> 
+0

待辦事項你在運行模型中使用'acceptersted_attributes_for:tapes'?爲什麼你不使用嵌套形式的tape_ids? – Hck

+0

@hcK我可以做的,運行模型是磁帶和盒子的連接模型。我已經有一個磁帶和盒子的列表,我需要創建一個表單,您可以將24個現有磁帶關聯到一個盒子,因此我瞭解嵌套表單是爲了創建新對象。 – haXs

+0

build_tape應該做什麼?它期待什麼作爲參數? – Raphael

回答

0

如果你不是在做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 
+0

你好,有點晚了,但是這段時間我幫我做了這個工作,謝謝。 – haXs

+0

比從未更好的遲到。 :)很高興它幫助! – Raphael