2012-04-29 23 views
5

按照Rails Guidesthis Railscasts插曲,當有兩個對象(如ProjectTask)之間的一個一對多協會,我們可以一起Project類似這樣的表單提交期間提交的Task多個實例:Rails在表單提交過程中如何將散列數組分組?

<% form_for :project, :url => projects_path do |f| %> 
    <p> 
    Name: <%= f.text_field :name %> 
    </p> 
    <% for task in @project.tasks %> 
    <% fields_for "project[task_attributes][]", task do |task_form| %> 
     <p> 
     Task Name: <%= task_form.text_field :name %> 
    Task Duration: <%= task_form.text_field :duration %> 
     </p> 
    <% end %> 
    <% end %> 
    <p><%= submit_tag "Create Project" %></p> 
<% end %> 

這將導致這樣的一個HTML塊的多個拷貝的形式,每一個任務:

<p> 
    Task Name: <input name="project[task_attributes][name]"> 
    Task Duration: <input name="project[task_attributes][duration]"> 
</p> 

我的問題是,如何Rails的瞭解哪些

(project[task_attributes][name], project[task_attributes][duration]) 

屬於一起,並把它們包裝成在params所得陣列的哈希元素?是否保證瀏覽器必須按照它們出現在源代碼中的相同順序發送表單參數?

+1

呃!剛剛找到答案[這裏](http://stackoverflow.com/questions/3300201/does-dom-order-determine-the-order-of-form-parameters-posted)。 顯然這是標準要求的。 – 2012-04-29 14:40:30

回答

1

,如果你是直線數據工作,並要發送回一個數組,而不使用任何這些@objects的

<%= form_for :team do |t| %> 
    <%= t.fields_for 'people[]', [] do |p| %> 
    First Name: <%= p.text_field :first_name %> 
    Last Name: <%= p.text_field :last_name %> 
    <% end %> 
<% end %> 

您的PARAMS數據應該返回這樣

"team" => { 
    "people" => [ 
    {"first_name" => "Michael", "last_name" => "Jordan"}, 
    {"first_name" => "Steve", "last_name" => "Jobs"}, 
    {"first_name" => "Barack", "last_name" => "Obama"} 
    ] 
} 
+0

創建的HTML將使這個答案適用於很多其他人也在搜索它,如果你覺得像添加它:) – Kevin 2015-09-13 06:20:00

+0

是的,HTML將幫助 – 23tux 2016-03-03 17:06:10

+0

是的,請提供HTML。 – 2016-03-24 21:46:01

2

是的,順序是保留原樣,作爲對原始問題的評論,作爲@ k-everest自我回答。

那些要求HTML,請參閱guide關於如何解析屬性的name。通常壞排序的

實施例:

cart[items][][id]=5 
cart[items][][id]=6 
cart[items][][name]=i1 
cart[items][][name]=i2 

和得到由滑軌解析成這樣:

{ "cart"=> {"items"=> [ 
         {"id"=>"5"}, 
         {"id"=>"6", "name"=>"i1"}, 
         {"name"=>"i2"} 
         ]}} 

示例源:https://spin.atomicobject.com/2012/07/11/get-and-post-parameter-parsing-in-rails-2/

特徵在Rails的初始提交加入,方法名稱爲build_deep_hash。欲瞭解更多歷史,跳過火焰/語義戰爭,並從這裏結束最後一篇文章:https://www.ruby-forum.com/topic/215584

相關問題