Как добавить в массив в Ruby - PullRequest
13 голосов
/ 11 июня 2009

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

Работает:

@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 ]

27 голосов
/ 11 июня 2009

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

@build = @cart.items.map { |item| Booking.build_booking('2009-06-13',3,2,18314) }
16 голосов
/ 11 июня 2009

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

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

@build = []
for item in @cart.items do
  @build += Booking.build_booking('2009-06-13',3,2,18314)
end
0 голосов
/ 11 июня 2009

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

@build = [ @build1, @build2 ]

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

0 голосов
/ 11 июня 2009
@build = []
for item in @cart.items do
  @build += Booking.build_booking('2009-06-13',3,2,18314)
end


 @build.flatten!

flatten будет работать, даже Booking.build_booking возвращает массив заказов

0 голосов
/ 11 июня 2009

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

Когда вы закончите:

@build = @build1 + @build2

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...