rails jbuilder - всего лишь массив строк

19

У меня есть контроллер, который возвращает массив объектов ActiveRecord и представление jbuilder для генерации json (все стандартные элементы). отлично работает, если я хочу, например, массив хэшей.

так, например, у меня есть:

json.array!(@list) do |l|
    json.( l, :field )
end

, который возвращает

[
  { "field": "one" },
  { "field": "two" },
  { "field": "three" }
]

однако, я хочу только массив строк; такой, что мой json

[
  "one",
  "two",
  "three"
]

Какой должен быть файл jbuilder?

    
задан yee379 08.05.2013 в 23:14
источник

2 ответа

40

Немного поздно, но это сработает:

json.array! @list

Но подумайте о том, чтобы использовать его в блоке для создания пары JSON:

json.data do
  json.array! @list  
end

# => { "data" : [ "item1", "item2", "item3" ] }
    
ответ дан irmakcanozsut 21.05.2013 в 22:27
источник
  • спасибо за ответ: я получаю ошибку «nil is not a symbol» при попытке любого предложения. однако если сделаю json.array! @devices do | d | json.i d.device end, он работает (однако у меня есть массив хэшей anon с одним ключом «i») –  yee379 05.06.2013 в 01:17
  • Просто попробуйте создать массив строк, например @ devices.collect {| d | d.device} и использовать этот массив для создания json. –  irmakcanozsut 06.06.2013 в 15:18
  • duh! глупый мне .. конечно, мне нужно собрать! благодаря! –  yee379 10.06.2013 в 17:55
  • Вы также можете использовать pluck как @ devices.pluck: device –  Max 03.04.2014 в 16:59
  • Что делать, если вы хотите захватить вещи из объекта, чтобы поместить в массив? –  j will 06.01.2016 в 20:14
4

Если вы хотите, чтобы Array был значением некоторого ключа, это будет работать:

json.some_key [1, 3, 4]
    
ответ дан Ilya Novojilov 21.12.2015 в 09:27
источник