【问题标题】:Why is fields_for rendering different indexes in the same form?为什么 fields_for 以相同的形式呈现不同的索引?
【发布时间】:2016-06-08 16:30:45
【问题描述】:

我使用的是 Rails 4.2.3。在我看来,我使用了“fields_for”指令。请注意,我在下面使用了两次(“f.fields_for :my_object_times”)……

  <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”索引呈现?请注意,我更愿意将我的元素在我的页面上的顺序保持原样。

【问题讨论】:

    标签: arrays ruby-on-rails-4 views fields-for


    【解决方案1】:

    想到两个解决方案:

    1 - 将您的 hidden_​​field(因为它未显示)与您的第二个 form_for 分组,这将使其成为非问题并且更加优雅。

    2 - 在您的控制器中构建您的 my_object_times 对象,因此当您调用 fields_for 方法时,您可以引用应该(我尚未测试过)给它相同引用的对象。

    如果这两个选项都不可行,我会查看代码,看看是否有任何方法可以重构以使其工作。

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 1970-01-01
      • 2023-03-12
      • 2013-03-08
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      相关资源
      最近更新 更多