2016-06-08 75 views
0

我正在使用Rails 4.2.3。在我看來,我利用了「fields_for」指令。請注意,我用它兩次(「f.fields_for:my_object_times」)下面...爲什麼fields_for以相同的形式呈現不同的索引?

<div class="field"> 
    <%= f.label "Time" %> <span class="required">*</span><br> 
    <%= select_tag('my_object[hour]', options_for_select((0..99).to_a.map { |i| i.to_s.rjust(2,'0')}), {:prompt => 'Select Hour'}) %> hrs 
    <%= select_tag('my_object[minute]', options_for_select((0..60).to_a.map { |i| i.to_s.rjust(2,'0')}), {:prompt => 'Select Minutes'}) %> min 
    <%= select_tag('my_object[second]', options_for_select((0..60).to_a.map { |i| i.to_s.rjust(2,'0')}), {:prompt => 'Select Seconds'}) %> sec 
    <%= f.fields_for :my_object_times do |mot| %> 
     <%= mot.hidden_field :time_in_ms %> 
    <% end %> 
    </div> 
    <div class="field"> 
    <%= f.fields_for :address do |addr| %> 
    <%= addr.label :address %><br> 
    City: <%= addr.text_field :city %> 
    <%= select_tag :state, options_for_select(us_states) %> 
    <%= country_code_select(:country, :country_id, 
       nil, 
       {:include_blank=>false}, 
       {:style=>''} 
      ) %> 
    <% end %> 
    </div> 
    <%= f.fields_for :my_object_times do |rt| %> 
    <div class="field"> 
    <%= rt.label :overall_rank %><br> 
    <%= rt.text_field :overall_rank %> 
    </div> 
    <div class="field"> 
    <%= rt.label :age_group_rank %><br> 
    <%= rt.text_field :age_group_rank %> 
    </div> 
    <div class="field"> 
    <%= rt.label :gender_rank %><br> 
    <%= rt.text_field :gender_rank %> 
    </div> 
    <% end %> 

但是,當我的形式獲取呈現,顯示不同的屬性數組索引(一個爲「0」,另一個是「 1「)...

<input type="hidden" name="my_object[my_object_times_attributes][0][time_in_ms]" id="my_object_my_object_times_attributes_0_time_in_ms" value="252008000"> 
… 
<input type="text" name="my_object[my_object_times_attributes][1][overall_rank]" id="my_object_my_object_times_attributes_1_overall_rank"> 

如何修改我的視圖代碼,使兩個屬性都使用」0「索引進行呈現?注意我寧願將我的元素的順序保留在我的頁面上。

回答

0

兩種解決方案浮現在腦海中:

1 - 一羣hidden_​​field(因爲它沒有被示出),第二個的form_for這將使其成爲一個非問題,更優雅。

2 - 在你的控制器中建立你的my_object_times對象,所以當你調用fields_for方法時,你可以引用那個應該(我沒有測試過)的對象給它相同的引用。

如果這兩個選項都不可行,我會查看代碼,看看是否有任何方法可以重構使其工作。

相關問題