如何在simple_fields_for中进行迭代?

时间:2013-01-22 21:34:42

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

我需要在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?

2 个答案:

答案 0 :(得分:13)

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 %>

答案 1 :(得分:4)

如前所述,在合并https://github.com/rails/rails/pull/5746之后,Rails 4中可能会出现这种情况。 在Rails 4中,您可以在“构建器”上使用.index

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