我可以写下...

      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