Как добавить в массив в Ruby

Я уверен, что это просто, но я не могу этого понять:

работает:

@build1 = Booking.build_booking('2009-06-13',3,2,18314)
@build2 = Booking.build_booking('2009-06-13',3,4,18317)
@build = @build1 + @build2

что я хочу работать...

#for item in @cart.items do
#  @build << Booking.build_booking('2009-06-13',3,2,18314)
#end

не работает...

#(1..3).each do |i|
#  @build << Booking.build_booking('2009-06-13',3,2,18314)
#end

5 ответов


за две итерации примеры, нужно установить @build перед вызовом << на нем.

Я не уверен, что build_booking возвращается, но если это массив (я предполагаю с первого, рабочего, примера), то вы, вероятно, захотите добавить результат build_booking to @build. Е. Г.

@build = []
for item in @cart.items do
  @build += Booking.build_booking('2009-06-13',3,2,18314)
end

Я предпочитаю использовать замечательные методы массива, которые ruby может предложить по циклу for:

@build = @cart.items.map { |item| Booking.build_booking('2009-06-13',3,2,18314) }

@build должен быть массив или объект, который отвечает на <<, for @build << на работу.

когда вы сделали:

@build = @build1 + @build2

каково значение @build?


быстрый подход, однако, состоял бы в том, чтобы просто объявить массив для объединения двух элементов:

@build = [ @build1, @build2 ]

Я бы использовал такой подход, как Magnar, хотя, что гораздо более лаконично.


@build = []
for item in @cart.items do
  @build += Booking.build_booking('2009-06-13',3,2,18314)
end


 @build.flatten!

сгладить будет работать даже бронирование.build_booking возвращает массив заказов