0

スケジュール用に 7 列のテーブルを作成しようとしています。各列に 20 個のフィールドをリストします。私は遊んでいますが、それを機能させる方法が見つかりません。

コントローラ:

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>

これは 40 フィールドのみを出力します。アイデアは、各列に 20 個の 140 フィールドを出力することです。

1 つのセルに 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 に答える