0

我正在尝试将一个包含七列的表格放在一起作为时间表。在每一列上,我想列出二十个字段。我到处玩,但我找不到让它工作的方法。

控制器:

def new
  @doctor = Doctor.new

  140.times { @doctor.schedules.build }
end

模型:

has_many :schedules

def schedule_attributes=(schedule_attributes)
    schedule_attributes.each do |attributes|
      schedules.build(attributes)
    end
end

形式:

<tr>
  <% @doctor.schedules.each_with_index do |schedule, i| %>
    <td>
      <% if i > 0 && i % 20 == 0 %>
      </td>
      <td>
      <% end %>
      <%= fields_for "doctor[schedule_attributes][]", schedule do |schedule_form|  %>
        <ul>
           <% schedule_form.text_field :day, value: @days[0] %>
           <li><%= schedule_form.check_box :hour, value: "8:00" %></li>
        </ul>                 
      <% end %>
    </td>
  <% end %>
</tr>

这只输出四十个字段。这个想法是输出 140 个字段,每列 20 个。

我想在一个单元格中插入二十个字段。有人可以指出我正确的方向吗?

4

1 回答 1

0

使用简单(快速而肮脏)的方法,您可以这样做:

<tr>
  <td>
    <% @doctor.schedules.limit(140).each_with_index do |schedule, i| %>
      <% if i > 0 && i % 20 == 0 %>
        </td>
        <td>          
      <% end %>
      <%= fields_for "doctor[schedule_attributes][]", schedule do |schedule_form|  %>
        <ul>
           <% schedule_form.text_field :day, value: @days[0] %>
           <li><%= schedule_form.check_box :hour, value: "8:00" %></li>
        </ul>                 
      <% end %>
    <% end %>
  </td>
</tr>

如果要重用此逻辑,则应使用辅助方法:

def to_columns(collection, num_columns)
  html = ""
  count = collection.size
  num_rows = (count / num_columns.to_f).ceil
  collection.each_with_index do |item, i|        
    html << '<td>'.html_safe if (i % num_rows == 0)
    html << yield(item, i)
    html << '</td>'.html_safe if (i % num_rows == 0 || i == (count - 1))
  end
  html
end

在您看来,让此方法<td>根据需要制作您的标签:

<tr>
  <%= to_columns(@doctor.schedules.limit(140), 7) do |schedule, i| %>
    <%= fields_for "doctor[schedule_attributes][]", schedule do |schedule_form|  %>
      <ul>
         <% schedule_form.text_field :day, value: @days[0] %>
         <li><%= schedule_form.check_box :hour, value: "8:00" %></li>
      </ul>                 
    <% end %>
  <% end %>
</tr>
于 2013-01-16T22:25:57.113 回答