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

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我可以写下面的...

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

改为如下所示? ...

      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"]

关于ruby-on-rails - 在 Rails 3.1 中可以使用 << 运算符插入多个对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8302888/

相关文章:

ruby-on-rails - Rails : If Foo has_many :bars, 做所有 :bars need to belong_to a Foo?

html - 响应式 Bootstrap 不会预编译

html - 如何删除 Bootstrap 3 链接之间的间距?

ruby - 使用 net/http 在 ruby​​ 中执行请求

ruby-on-rails - 如何将 MAC 地址转换为格式化 MAC 地址

ruby-on-rails - 如何从 Ruby 1.9.2 降级到 Ruby 1.8.7 以运行 Rails 2.0.2

ruby-on-rails - 为什么我的 Rails 测试看不到内存中 SQLite3 数据库的内容?

ruby-on-rails - 带有 ActionDispatch::Cookies 的 Rails 5 API 模式

JavaScript:未捕获语法错误:参数列表后缺少 )

ruby-on-rails - 如何用西类牙语加载我的 Rails 控制台