Как создать JSON с ключами в качестве значений массива - PullRequest
0 голосов
/ 11 октября 2018

Например, я получил array = [zoo, foo, bar, ...].

Мне нужно создать JSON с хэшем, где ключи - это значения массива, а значения хэша - это другие хэши. Примерно так:

"model_field": {
   "zoo": {
      "name": "zoo",
      "key2": "value2",
      "key3": "value3"
   },
   "foo": {
      "name": "foo",
      "key2": "value2",
      "key3": "value3"
   },
  ...
}

Я пытался сделать что-то вроде этого

def json
  render json: {model_field: {array.each do |x|
      {x => {name: x, key2: "value2", key3: "value3"}
      }
    end
    }
  }
end

, но я застрял.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 11 октября 2018

each возвращает объект, который вы итерировали, независимо от того, что вы делали внутри цикла:

%w[zoo foo bar].each { |x|  } # => ["zoo", "foo", "bar"]

Что-то, что вы могли бы сделать, это each_with_object передать хеш каждой итерации и заполнить его.Возвращает объект, который вы передали после последней итерации:

array = %w[zoo foo bar]

output = {
  model_field: array.each_with_object({}) do |x, hash|
    hash[x] = { name: x, key2: rand(1..100) }
  end
}
# => {
#      :model_field=>{
#        "zoo"=>{:name=>"zoo", :key2=>25},
#        "foo"=>{:name=>"foo", :key2=>83},
#        "bar"=>{:name=>"bar", :key2=>98}
#      }
#    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...