0

個々の部屋の価格を格納するためのネストされたモデルのセットがあります。

すなわち。

  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 %>
4

1 に答える 1

1

あなたが試すことができます:

@rooms.each do |r|
  ((r.room_rates.size+1)..7).each {   
      r.room_rates.build       
  }
end
于 2010-02-22T12:43:57.113 に答える