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

Jac*_*cob 3 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我可以写以下内容吗?

      raw_data.categories.each do |category|
          obj.categories << category
      end
Run Code Online (Sandbox Code Playgroud)

如下呢?...

      obj.categories << raw_data.categories
Run Code Online (Sandbox Code Playgroud)

BM5*_*M5k 11

看看Array#<<Array#push.

Array#<<取一个附加到给定数组的位置.例如:

irb> array = %w[ a b c ]       # => ["a", "b", "c"]
irb> array << 'd'              # => ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)

但是,如果你传递一个数组,你会对结果感到惊讶

irb> array << ['e', 'f', 'g']  # => ["a", "b", "c", "d", ["e", "f", "g"]]
Run Code Online (Sandbox Code Playgroud)

Array#push 可以处理1个以上的对象,每个对象都附加到数组中.

irb> array = %w[ a b c ]         # => ["a", "b", "c"]
irb> array.push 'd'              # => ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)

但是,#push使用数组调用会得到与之相同的结果#<<.

irb> array.push ['e', 'f', 'g']  # => ["a", "b", "c", "d", ["e", "f", "g"]]
Run Code Online (Sandbox Code Playgroud)

为了推送数组中的所有元素,只需*在第二个数组之前添加一个元素.

irb> array.push *['e', 'f', 'g']  # => ["a", "b", "c", "d", "e", "f", "g"]
Run Code Online (Sandbox Code Playgroud)

在相关的说明中,虽然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"]
Run Code Online (Sandbox Code Playgroud)

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

irb> array  = %w[ a b c ]         # => ["a", "b", "c"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
irb> array |= ['d']               # => ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)


Mor*_*ori 9

obj.categories |= raw_data.categories 
Run Code Online (Sandbox Code Playgroud)