Проблема с сортировкой массива json в Ruby - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть выражение ruby, которое создает массив json следующим образом

<%= raw((Object.listA | Object.listB).map { |s| {s.id.to_s => s.name} }.reduce(Hash.new, :merge).to_json)%>

В приведенном выше выражении Object является ActiveRecord, который имеет 2 атрибута, называемых listA и listB.Каждый из этих списков представляет собой список объектов с идентификатором и именем.Я хочу объединить эти 2 списка, а затем отсортировать окончательный список по имени.Я попытался сделать следующее, но я не могу получить отсортированный список по имени.

<%= raw((Object.listA | Object.listB).sort_by{ |s| s.name}.map { |s| {s.id.to_s => s.name} }.reduce(Hash.new, :merge).to_json)%>

1 Ответ

0 голосов
/ 02 февраля 2019

Я бы сделал что-то вроде этого:

Object.listA.merge(Object.listB)
            .sort_by(&:name)
            .map { |o| { o.id.to_s => o.name } }
            .to_json

Я не уверен, чего вы пытаетесь достичь с помощью вызова метода reduce(Hash.new, :merge).Кроме того, я предлагаю следовать правилам именования Ruby (переменные и имя метода в подчеркивании вместо верблюда) и перемещать сложные цепочки методов, подобные этим, из представления в модель или помощника.

...