【问题标题】:how to iterate inside a simple_fields_for?如何在 simple_fields_for 中迭代?
【发布时间】:2013-01-22 21:34:42
【问题描述】:

我需要在 simple_fields_for 块内进行迭代,为 :day 字段分配一个数字 [0 到 6]。

控制器

7.times { @doctor.schedules.build }

查看

<tr>
    <% @i = 0 %>
    <%= f.simple_fields_for :schedules do |builder| %>
    <td>
    <%= builder.input :day, value: @y, wrapper: :check  %>
    <%= builder.input :is_available, as: :boolean, label: false, wrapper: :check %>
    <% @i += 1 %>
    </td>
<% end %>
</tr>

显然这将从 1 开始到 7,我怎样才能让它从 0 迭代到 6?

【问题讨论】:

  • 假设@y 应该是@i,这似乎应该从 0 循环到 6。

标签: ruby ruby-on-rails-3 simple-form


【解决方案1】:

JFYI,您将能够在 Rails 4 中获取当前索引。请参阅 this 合并拉取请求

现在你可以使用这样的东西:

<% @doctor.schedules.each_with_index do |schedule, index| %>
  <%= f.simple_fields_for :schedules, schedule do |ff| %>
    <%= ff.input :day, value: index %>
  <% end %>
<% end %>

【讨论】:

    【解决方案2】:

    如前所述,在合并https://github.com/rails/rails/pull/5746 之后,它可以在 Rails 4 中使用。 在 Rails 4 中,您可以在“builder”上使用.index

    <%= f.simple_fields_for :schedules do |builder| %>
      <%= builder.input :day, value: builder.index+1 %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2020-09-14
      相关资源
      最近更新 更多