嵌套属性对象创建三次而不是一次

时间:2010-10-17 08:51:42

标签: ruby-on-rails

我有三种型号,预订,房间和旅行者。

预订有很多房间 房间里有很多旅行者

由于我正在进行多步骤向导预订并首先创建房间,因此将在更新操作中稍后创建旅行者。

这是更新操作的日志: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")

只创建了一个对象,即使我返回视图并再次提交,他也会正确更新创建的对象,而不会创建新对象。

2 个答案:

答案 0 :(得分:0)

@booking.rooms.collect {|room| room.number_of_persons.times {room.travellers.build}  if room.travellers.blank?}

这对我来说不对。你是在启动旅行者但不是存储它们并收集阵列但是没有用它做任何事情。此外,我知道你想要创造一些旅行者,但你的条件是旅客空白。

@travellers = @booking.rooms.collect { |room| room.number_of_persons.times { room.travellers.build } }

答案 1 :(得分:0)

我通过在模型中进行创建而不是通过表单来实现它。 所以基本上在房间创建后我做了:

self.rooms.map {|r| r.number_of_persons.times {r.travellers.create}}