通过RubyOnRails中的map函数映射对象

时间:2018-06-08 16:49:59

标签: ruby-on-rails ruby mapping

我想明白:

  • 为什么exec_query在使用map函数映射时返回一个带对象的数组?
  • 如何通过map函数对id和nome变量进行赋值?

我有这段代码:

produto = ActiveRecord::Base.connection.exec_query("SELECT * FROM produtos")

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

1 个答案:

答案 0 :(得分:3)

道歉是挑剔,但map不是一个功能。这是一种方法。并且,根据docs,它

  

创建一个包含块返回值的新数组。

因此,对于您的第一个问题,map方法返回produti数组,因为Produto的实例是块返回的值。

关于第二个问题,使用map的{​​{1}}方法正在创建@columnshash),如:

p

对于{id: 1, nome: 'yuri'} 中的每个条目,然后在@rows时用于实例化Produto的每个实例。

尝试:

Produto.new(p)

检查出来。