個々の部屋の価格を格納するためのネストされたモデルのセットがあります。
すなわち。
Places
Rooms
Room_rates
各モデルには、必要な accept_nested_attributes_for と has_many belongs_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
試した
@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 %>