Так что было не совсем ясно, хотите ли вы преобразовать свои идентификаторы в строки или нет. Я предполагал, что нет, но если вы хотите, чтобы они были как строки, просто добавьте .to_s
к вызову i на карте.
Итак, работая назад с выхода, я вижу, что у вас есть хэш с одним ключом, значение представляет собой массив хэшей идентификатора ключа. Из этого я делаю эквивалентную структуру ruby, hash => массивы хешей.
require 'json'
{ cars: [111,333,888].map do |i|
{ id: i }
end
}.to_json
=> "{\"cars\":[{\"id\":111},{\"id\":333},{\"id\":888}]}"
Если вы находитесь в рельсах, вам не нужно требовать json.
С рубином, поскольку все это объект, вы можете сделать это эффективно однострочным. Учитывая отсутствие контекста, я не могу сказать, имеет ли это смысл или нет.
Если вы находитесь в объекте, вы можете захотеть отделить построение хешей идентификаторов новым методом и вызвать это. Если это Rails и идентификаторы, на самом деле в отношениях ActiveRecord, что вы захватывая, вы можете сделать что-то вроде этого:
{ users: User.select(:id).first(3) }.to_json
User Load (0.3ms) SELECT `users`.`id` FROM `users` ORDER BY `users`.`id` ASC LIMIT 3
=> "{\"users\":[{\"id\":1},{\"id\":2},{\"id\":3}]}"
явно не идеальный матч, чтобы ваш случай, но вы должны быть в состоянии бежать оттуда.