2015-12-05 40 views
0

我此行controller/new多個記錄的形成:形式的多個目標 - 捕捉只有最後一條記錄

@students = Array.new(quantity) {@stream.students.build} 

查看文件:

<%= @errors.inspect %> 
<%= form_for :students_list, {:url => create_students_list_stream_url(@stream) } do |students_list_form| %> 
<% i=0 %> 

<% @students.each do |student| %> 
<% i=i+1 %> 
<%= students_list_form.fields_for student do |student_form|%> 
<%= render :partial => "students/add_students_to_stream", locals: {:student=>student, :student_form=>student_form, :i=>i} %> 
<% end %> 
<% end %> 
<%= students_list_form.submit "Добавить студентов" %> 
<% end %> 

這會產生期待,而正確的HTML,一個輸入:

<input id="name-field-1" type="text" name="students_list[student][account_attributes][name]" /> 
... 

請注意,它可以是每個頁面多個對象,比如這個輸入,就像I wan t創建記錄列表。

但是,從我的服務器日誌中可以看到,Rails獲取的參數僅包含最後一條記錄。

例如,我在頁面上有兩個「學生」的表單。

<input id="name-field-1" type="text" name="student[student][account_attributes][name]" /> 
<input id="name-field-2" type="text" name="student[student][account_attributes][name]" /> 

輸入有名字約翰和彼得,我的服務器日誌將表明:

"students_list"=>{"student"=>{"account_attributes"=>{"name"=>"Peter"}}} 

和完蛋了。

回答

0

字段命名完全一樣,沒有數組登錄名,這就是瀏覽器覆蓋它們的原因。

爲了使瀏覽器後陣列 - 字段應該結束了一個名爲students_list[][student][account_attributes][name](注意額外[],通過將其放置在可以控制哪些元素進行分組名稱的不同部分)

所以儘量fields_for 'students_list[]', ...

1

在這種情況下,您必須添加multiple="multiple"並將名稱類型設置爲數組。

html。

<input id="name-field-1" type="text" multiple="multiple" name="student[student][account_attributes][name][]" /> 

導軌。

<%= form.text_field :object, id: "id", multiple: true %> 

因此,這將返回所有元素作爲Array爲一個相同的字段名稱。

相關問題