Как добавить массив в 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
Ответы
Ответ 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, хотя это гораздо более краткий.