¿Se pueden insertar múltiples objetos con el operador << en Rails 3.1?
-
25-10-2019 - |
Pregunta
¿Podría escribir lo siguiente ...
raw_data.categories.each do |category|
obj.categories << category
end
Como el siguiente en su lugar? ...
obj.categories << raw_data.categories
Solución
obj.categories |= raw_data.categories
Otros consejos
Echa un vistazo a Array#<<
y Array#push
.
Array#<<
toma uno que se adjunta en su lugar a una matriz dada. Por ejemplo:
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array << 'd' # => ["a", "b", "c", "d"]
Sin embargo, si pasa una matriz, se sorprenderá del resultado
irb> array << ['e', 'f', 'g'] # => ["a", "b", "c", "d", ["e", "f", "g"]]
Array#push
puede manejar más de 1 objetos, cada uno de los cuales se agregan a la matriz.
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array.push 'd' # => ["a", "b", "c", "d"]
Sin embargo, llamando #push
con una matriz le da el mismo resultado que #<<
.
irb> array.push ['e', 'f', 'g'] # => ["a", "b", "c", "d", ["e", "f", "g"]]
Para empujar todos los elementos de la matriz, simplemente agregue un *
antes de la segunda matriz.
irb> array.push *['e', 'f', 'g'] # => ["a", "b", "c", "d", "e", "f", "g"]
En una nota relacionada, mientras Array#+
Concatena las matrices, también permitirá valores duplicados.
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array += ['d'] # => ["a", "b", "c", "d"]
irb> array += ['d'] # => ["a", "b", "c", "d", "d"]
Si esto no está deseado, el |
El operador devolverá una unión de dos matrices, sin valores duplicados.
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array |= ['d'] # => ["a", "b", "c", "d"]
irb> array |= ['d'] # => ["a", "b", "c", "d"]