5 votes

Peut-on insérer plusieurs objets avec l'opérateur << dans Rails 3.1?

Puis-je écrire ce qui suit ...

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

Comme suit à la place? ...

      obj.categories << raw_data.categories

12voto

BM5k Points 390

Jetez un œil sur Array#<< et Array#push.

Array#<< prend un élément qui est ajouté à l'array donné. Par exemple:

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

cependant, si vous passez un array, vous serez surpris du résultat

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

Array#push peut gérer 1+ éléments, chacun étant ajouté à l'array.

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

Cependant, appeler #push avec un array vous donne le même résultat que #<<.

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

Pour ajouter tous les éléments de l'array, ajoutez simplement un * avant le deuxième array.

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

Sur une note connexe, bien que Array#+ concatène les arrays, il permet également des valeurs en double.

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 cela est indésirable, l'opérateur | renverra une union de deux arrays, sans valeurs en double.

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

9voto

Mori Points 10767
obj.categories |= raw_data.categories

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X