表与字段列表

时间:2013-01-16 22:17:40

标签: html ruby-on-rails ruby html5

我正在尝试将一个包含七列的表放在一起来制定计划。在每列我想列出二十个字段。我在玩,但我找不到让它工作的方法。

控制器:

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个。

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

1 个答案:

答案 0 :(得分: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>