Отображение объектов с помощью функции карты в RubyOnRails - PullRequest
0 голосов
/ 08 июня 2018

Я хочу понять:

  • Почему exec_query возвращает массив с объектом при отображении с помощью функции map?
  • Как происходит назначение переменных id и nome с помощью mapфункция?

У меня есть этот код:

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

1 Ответ

0 голосов
/ 08 июня 2018

Извините за то, что я придирчив, но map не является функцией.Это метод.И, согласно документам , он

создает новый массив, содержащий значения, возвращаемые блоком.

Итак, к вашему первому вопросуметод map возвращает массив produti, поскольку экземпляр Produto является значением, возвращаемым блоком.

На ваш второй вопрос, метод map, использующий @columns, создает hash (p), например:

{id: 1, nome: 'yuri'}

Для каждой записи в @rows который затем используется для создания экземпляра Produto, когда вы делаете Produto.new(p).

Попробуйте:

produto.map do |p| 
  puts p
  Produto.new(p)
end

, чтобы проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...