пустой массив jbuilder удаляет ключ - PullRequest
0 голосов
/ 19 февраля 2020

My Controller Возвращает @quotes, который может быть пустым массивом.

Затем я отображаю следующий вид.

  json.set! :quotes do
    @quotes.each do |quote|
      json.set! quote.id do
        json.id       quote.id
        json.symbol   quote.symbol
        json.price    quote.price
        json.datetime quote.datetime
      end
    end
  end

Обычно это приводит к

"quotes": {
  "123": {
    "id": 123,
    "symbol": "AAPL",
    "price": 100,
    "datetime": "2019-12-31T16:00:00.000Z"
},

Однако, если @quotes - пустой массив, ответом будет

{}

Когда я хочу

{
  "quotes": {}
}

Есть ли способ достичь моей цели без явной проверки, если объект пуст?

Я Не хочу сделать

if @quotes.empty?
  json.quotes({})
else

- я использую Jbuilder 2.7

1 Ответ

0 голосов
/ 02 марта 2020

Я советую вам использовать jb gem. Легко перейти от jbuilder к jb (я делал это на производственном проекте). Jb в несколько раз быстрее, чем jbuilder, и не имеет уродливого синтаксиса jbuilder, это просто ruby. Ваша проблема может быть решена в JB

json = { quotes: {} }
@quotes.each do |quote|
  json[:quotes][quote.id] = {
    ...
  }
end

json
...