Как добавить в массив в 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 возвращает массив заказов