Подтвердить что ты не робот

Как добавить массив в 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
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

@build = @build1 + @build2

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

Ответ 4

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


 @build.flatten!

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

Ответ 5

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

@build = [ @build1, @build2 ]

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