可以在Rails 3.1中使用<<运算符插入多个对象吗?

我可以写以下内容吗?

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[ abc ] # => ["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[ abc ] # => ["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[ abc ] # => ["a", "b", "c"] irb> array += ['d'] # => ["a", "b", "c", "d"] irb> array += ['d'] # => ["a", "b", "c", "d", "d"] 

如果这是不希望的, | operator将返回两个数组的并集,没有重复值。

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