У меня сложная форма, похожая на недавнюю скринкаст Райана Бейтса
Однако вложенные элементы работают нормально. Я создаю или обновляю сетку данных, таких как эта, через форму, в которой указаны цены за день. Моя проблема начинается, когда они оставляют один бланк. У меня есть опция nested_attributes_for для того, чтобы не сохранять nils, и она работает, если они сохраняют только одно значение в определенной строке, он сохраняет правильный день, однако при перезагрузке помещает его в неправильный столбец. Я не уверен, как упорядочить значения в строке в форме. IE Сохраненное значение для среды появится в столбце понедельника (правильной строки). Этого не происходит, если они сохраняют все значения для строки (тогда это работает отлично).
Данные хранятся в БД примерно так
ID OBJECT_ID DAYOFWEEK PRICE
и отображается как показано ниже
+------+----------------+-------+-------+-------+------+-------+
| id | name | Mon | Tue | Wed | Thu | Fri | -> +2 more days etc
+------+----------------+-------+-------+-------+------+-------+
| 1234 | Some name | 87.20 | 87.20 | 87.20 | 82.55| 85.48 |
+------+----------------+-------+-------+-------+------+-------+
| 1234 | Some name | 87.20 | 87.20 | 87.20 | 82.55| 85.48 |
+------+----------------+-------+-------+-------+------+-------+
| 1234 | Some name | 87.20 | 87.20 | 87.20 | 82.55| 85.48 |
+------+----------------+-------+-------+-------+------+-------+
Код контроллера, создающий или отображающий эти значения, выглядит следующим образом:
Контроллер
@rooms.each do |r|
((r.room_rates.size+1)..7).each {
r.room_rates.build
}
end
rooms.html.erb
<% @dow = 0 %>
<tr class="room">
<td><%= f.text_field :name %></td>
<% f.fields_for :room_rates do |rates| %>
<%= render 'rates', :f => rates %>
<% @dow += 1 %>
<% end %>
<td class="delete_mode" style="display:none;">
<%= f.hidden_field :_destroy %>
<%= link_to_function "remove", "remove_room(this)" %>
</td>
</tr>
rates.html.erb
<td>
<%= f.text_field :price, :size => 3 %>
<%= f.hidden_field :dayofweek, :value => @dow %>
<%= f.hidden_field :source, :value => 0 %>
</td>
модель room_rates (куда идут данные из формы)
+-------+---------+-----------+-------+--------+---------------------------+---------------------------+
| id | room_id | dayofweek | price | source | created_at | updated_at |
+-------+---------+-----------+-------+--------+---------------------------+---------------------------+
| 92745 | 8 | 0 | 1.0 | 0 | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92746 | 8 | 1 | 2.0 | 0 | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92747 | 8 | 2 | 3.0 | 0 | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92748 | 8 | 3 | 4.0 | 0 | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92749 | 8 | 4 | 5.0 | 0 | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92750 | 8 | 5 | 6.0 | 0 | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92751 | 8 | 6 | 7.0 | 0 | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92752 | 9 | 3 | 5.0 | 0 | 2010-02-23 14:33:33 +0100 | 2010-02-23 14:33:33 +0100 |
+-------+---------+-----------+-------+--------+---------------------------+---------------------------+
заказ в консоли
+---------+-----------+-------+--------+---------------------------+---------------------------+
| room_id | dayofweek | price | source | created_at | updated_at |
+---------+-----------+-------+--------+---------------------------+---------------------------+
| 2517 | 0 | | | | |
| 2517 | 1 | | | | |
| 2517 | 2 | 3.0 | 0 | 2010-02-23 17:54:28 +0100 | 2010-02-23 17:54:28 +0100 |
| 2517 | 3 | 4.0 | 0 | 2010-02-23 17:54:28 +0100 | 2010-02-23 17:54:28 +0100 |
| 2517 | 4 | | | | |
| 2517 | 5 | | | | |
| 2517 | 6 | | | | |
+---------+-----------+-------+--------+---------------------------+---------------------------+