我想了解:
为什么exec_query在通过映射函数映射时返回带有对象的数组?
如何通过map函数分配id和nom变量?
我有这个密码:
produto = ActiveRecord::Base.connection.exec_query("SELECT * FROM produtos")
产品退货

#<ActiveRecord::Result:0xb774bc8 @columns=["id", "nome"], @rows=[[1, "yuri"], [2, "Igor"], [3, "Iran"], [4, "Hotaviano"], [5, "Maria"], [6, "José"], [7, "Mateus"], [8, "kaun"]], @hash_rows=nil, @column_types={}>

当我这样做时:
produto.map { |p| Produto.new(p) }

它返回以下内容:
[
  #<Produto:0xad8fd60 @id=1, @nome="yuri">,
  #<Produto:0xad8fbe4 @id=2, @nome="Igor">,
  #<Produto:0xad8fbd0 @id=3, @nome="Iran">,
  #<Produto:0xad8fb1c @id=4, @nome="Hotaviano">,
  #<Produto:0xad8facc @id=5, @nome="Maria">,
  #<Produto:0xad8f9b4 @id=6, @nome="José">,
  #<Produto:0xad8f9a0 @id=7, @nome="Mateus">,
  #<Produto:0xad8f784 @id=8, @nome="kaun">
]

最佳答案

很抱歉太挑剔了,但是map不是一个函数这是一种方法而且,根据docs,它
创建包含块返回的值的新数组。
因此,对于第一个问题,map方法返回一个produti数组,因为Produto的实例是块返回的值。
对于第二个问题,使用map@columns方法正在创建一个hashp)类似于:

{id: 1, nome: 'yuri'}

对于@rows中的每个条目,当您执行Produto时,它将用于实例化Produto.new(p)的每个实例。
尝试:
produto.map do |p|
  puts p
  Produto.new(p)
end

去看看。

08-27 18:02