метод построения рельсов для сложной модели с днями недели - PullRequest
0 голосов
/ 22 февраля 2010

У меня есть набор вложенных моделей для хранения цен на отдельные номера.

Т.е..

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

1 Ответ

1 голос
/ 22 февраля 2010

Вы можете попробовать:

@rooms.each do |r|
  ((r.room_rates.size+1)..7).each {   
      r.room_rates.build       
  }
end
...