Можно ли вставить несколько объектов с оператором << Rails 3.1?

StackOverflow https://stackoverflow.com/questions/8302888

Вопрос

Могу я написать следующее ...

      raw_data.categories.each do |category|
          obj.categories << category
      end

Как следующее? ...

      obj.categories << raw_data.categories
Это было полезно?

Решение

obj.categories |= raw_data.categories 

Другие советы

Взгляни на Array#<< а также Array#push.

Array#<< принимает тот, который добавляется на место, чтобы получить массив. Например:

irb> array = %w[ a b c ]       # => ["a", "b", "c"]
irb> array << 'd'              # => ["a", "b", "c", "d"]

Однако, если вы пройдете массив, вы будете удивлены результатом

irb> array << ['e', 'f', 'g']  # => ["a", "b", "c", "d", ["e", "f", "g"]]

Array#push может обрабатывать 1+ объекта, каждый из которых добавляется к массиву.

irb> array = %w[ a b c ]         # => ["a", "b", "c"]
irb> array.push 'd'              # => ["a", "b", "c", "d"]

Однако звонок #push с массивом дает вам тот же результат, что и #<<.

irb> array.push ['e', 'f', 'g']  # => ["a", "b", "c", "d", ["e", "f", "g"]]

Чтобы подтолкнуть все элементы в массиве, просто добавьте * перед вторым массивом.

irb> array.push *['e', 'f', 'g']  # => ["a", "b", "c", "d", "e", "f", "g"]

На связанной примечании, в то время как Array#+ Соглашает массивы, это также позволит дублировать значения.

irb> array  = %w[ a b c ]         # => ["a", "b", "c"]
irb> array += ['d']               # => ["a", "b", "c", "d"]
irb> array += ['d']               # => ["a", "b", "c", "d", "d"]

Если это нежелательно, то | Оператор вернет союз из двух массивов без дублирующих значений.

irb> array  = %w[ a b c ]         # => ["a", "b", "c"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top