У меня есть набор вложенных моделей для хранения цен на отдельные номера.
Т.е..
Places
Rooms
Room_rates
У каждой модели есть необходимые атрибуты acceptpts_nested_attributes_for и has_many own_to, и у меня есть форма и метод сборки, которые отлично подходят для первоначального создания.
Мой вопрос заключается в том, как сделать более умный контроллер, который либо создает поле, если оно не существует, либо читает из него, если он существует (и не создает его). В настоящее время он работает только для начального ввода, в противном случае он пытается построить больше полей, чем это возможно, и прерывается при повторной передаче.
def new
@place = Place.find(params[:place_id])
@rooms = @place.rooms
@rooms.each do |r|
7.times { r.room_rates.build } #days of the week
end
end
1011 * пытался *
@rooms.each do |r|
7.times {
unless r.room_rates
r.room_rates.build
end
}
end
база данных для room_rates
id, room_id, dayofweek, price
форма
<% form_for @place do |f| %>
<%= f.error_messages %>
<table>
<tr>
<th>Room</th>
<th>Mon</th>
<th>Tue</th>
<th>Wed</th>
<th>Thu</th>
<th>Fri</th>
<th>Sat</th>
<th>Sun</th>
</tr>
<% f.fields_for :rooms do |room| %>
<% dow = 0 %>
<tr>
<td><%= room.text_field :name %></td>
<% room.fields_for :room_rates do |rates| %>
<td>
<%= rates.text_field :price %>
<%= rates.text_field :dayofweek, :value => dow %>
</td>
<% dow += 1 %>
<% end %>
</tr>
<% end %>
</table>
<%= f.submit "Submit" %>
<% end %>