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