У меня три модели, бронирование, номер и путешественники.
В бронировании много номеров
в номере много путешественников
Так как я делаю многошаговое бронирование мастера, а номера создаются первыми, путешественники создаются позже в действии обновления.
Это журнал действия обновления: http://pastie.org/private/it7onlg8bnurqkgv6mptrq
А вот соответствующие методы и действия для создания путешественников:
Действие просмотра
def step3
@booking = Booking.find_by_random_url_key(params[:id])
@variant = @booking.variant
@booking.rooms.collect {|room| room.number_of_persons.times {room.travellers.build} if room.travellers.blank?}
render :partial => "bookings/partials/step3", :layout => "booking"
end
room.number_of_persons метод просто возвращает int.
Соответствующая часть действия по обновлению
..
elsif @booking.update_attributes(params[:booking]) && @booking.aasm_state == "step3"
redirect_to booking_step4_url(@booking)
@booking.next!
..
следующий! это просто переход аазм
Если я создаю в консоли
Room.last.travellers.create(:forename => "john", :country_name => "Germany")
Создается только один объект, и даже если я вернусь в представлении и снова отправлю его, он корректно обновляет созданный объект и не создает новые.