0
一週
我有用於存儲各個房間的價格一組嵌套模式的天。軌構建複雜的模型方法與
即,
Places
Rooms
Room_rates
每個模型都有必要accepts_nested_attributes_for和的has_many belongs_to的關聯,我有一種形式,它完全適用於初始創建的build方法。
我的問題是如何做出更明智的控制器,要麼構建領域,如果它不存在,或從中讀取,如果它(並且不建立的話)。目前它只適用於初始輸入,否則它會嘗試構建比可能的更多的字段,並在重新提交時中斷。
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 %>
這似乎很好地工作......然而,這並不正確的編輯映射。如果有人只更新了一行中的一個字段,它會保存並妥善保存,但是當它重新加載時,它會顯示錯誤的位置?即使數據庫正確顯示,它也不是在星期三的專欄中顯示在星期一。它沒有這個問題,如果沒有一行中的字段是空白的。 – holden
不知何故,循環必須按照他們在本週的位置排序?我不知道如何做到這一點。 – holden
我想你在這裏有一些不好的設計問題。對我而言,如果您需要爲每個房間準確定位7行,那麼這看起來很糟糕。如果你在建立'room'的時候建立'room_rates',那麼它就會工作,所以當它迭代'room_rates'時,即使價格是'nil',也總會有星期一。我會將'monday_price','tuesday_price'等列添加到房間模型或單獨存儲整個星期價格的模型中。在任何情況下都會容易得多。 – klew