Как собрать и объединить последние два в массив - PullRequest
1 голос
/ 08 апреля 2020

Я не получаю ожидаемых результатов. Pluck возвращает массив, так почему .last не работает?

Вот пример без фактических данных примера:

Model.all.map { |obj| {name: obj.name, accounts: obj.accounts.pluck(:id, :code, :name) }

# Returns:
[
  {name: "Stock", accounts: ["12345", "090", "Imports 2%"], [...] },
  {...}
],
[...]

Что я на самом деле делаю:

Model.all.map { |obj| {name: obj.name, accounts: obj.accounts.pluck(:id, :code, :name).last(2).join('-') }

# Returns

[
  {name: "Stock", accounts: "12345-090-Imports 2%"},
  {...}
],
[...]

Я ожидаю:

[
  {name: "Stock", accounts: ["12345", "090-Imports 2%"], [...]},
  {...}
],
[...]

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020
Model.all.map do |obj| 
  accounts = obj.accounts.pluck(:id, :code, :name).map { |id, code, name| [id, "#{code}-#{name}"] }
  {
    name: obj.name, 
    accounts: accounts
  }
end

но это должно быть оптимизировано

1 голос
/ 08 апреля 2020

Заменить pluck(:id, :code, :name).last(2).join('-') на last(2).pluck(:id, :code, :name).join('-') }

...