Как вручную построить правильную вложенную форму с accepts_nested_attributes_for? - PullRequest
0 голосов
/ 22 июня 2010

Я пытаюсь вручную создать поля формы для целей тестирования. Я получил следующие модели:

class Bedroom < ActiveRecord::Base
    has_many :booked_bedrooms
    has_many :bookings, :through => :booked_bedrooms
end

class Booking < ActiveRecord::Base
    has_many :booked_bedrooms
    has_many :bedrooms, :through => :booked_bedrooms
    accepts_nested_attributes_for :booked_bedrooms
end

class BookedBedroom < ActiveRecord::Base
    belongs_to :booking
    belongs_to :bedroom
    # fields: bedroom_id, :booking_id
end

Когда я пытаюсь выполнить следующие действия в консоли, резервирование и связанный с ним объект booked_bedroom сохраняются:

>> b = Booking.new({ :booked_bedrooms_attributes => { 0 => { :bedroom_id => 1  }  }  })
=> #<Booking id: nil, start_date: nil, end_date: nil, created_at: nil, updated_at: nil>
>> b.save
=> true
>> b.booked_bedrooms
=> [#<BookedBedroom id: 1, booking_id: 1, bedroom_id: 1, created_at: "2010-06-22 18:55:57", updated_at: "2010-06-22 18:55:57">]

Итак, я построил такую ​​форму:

<% form_for @booking do |form| %>
<% for bedroom in @available_bedrooms %>

            <%= check_box_tag "booked_bedrooms_attributes[#{bedroom.id}][bedroom_id]", bedroom.id %> <%= bedroom.name %>  
            as
            <%= select_tag "booked_bedrooms_attributes[#{bedroom.id}][booking_type_id]", options_for_select(bedroom.booking_types.map {|p| [p.name, p.id]}) %>
<% end %>
<% end %>

Но это не сработает. Бронирование сохраняется, но нет новых записей BookedBedroom. Может кто-нибудь сказать мне, что не так?

Я знаю, что мог бы использовать formtastic или некоторые поля_ для, но я хотел решить проблему в жестко закодированных формах для демонстрационных целей.

1 Ответ

1 голос
/ 23 июня 2010

Я считаю, что это должно быть что-то вроде

<%= check_box_tag "booking[booked_bedrooms_attributes][][bedroom_id]",
   bedroom.id %>

<%= select_tag "booking[booked_bedrooms_attributes][][booking_type_id]",
   options_for_select(bedroom.booking_types.map {|p| [p.name, p.id]}) %>
...