изменить ключ хеша через вызов функции - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть хэш, где ключи являются country_id, и я хотел бы изменить ключи country_id, чтобы фактически иметь название страны. У меня есть функция, которая может выполнять преобразование идентификатора в имя, но я не могу понять, как обновить ключи и правильно сопоставить их текущие значения.

Также я не могу использовать transform_keys из-за версии ruby ​​\ rails, на которой я работаю.

Я не знаю, какая страна будет выбрана, поэтому мне нужен способ циклического перебора ключей и их обновления, а затем сохранения обратно в хэш или новый хэш со значениями, сопоставленными правильно.

хэш, который у меня есть, называется @trending_countries ключи в настоящее время - это country_id, который необходимо обновить, и значение состоит из числа для этой конкретной страны.

@trending_countries = {22=>2, 34=>3} и хотелось бы в формате @trending_countries = {United States=>2, Canada=>3}

Я попытался сделать следующее в моем контроллере

@trending_countries.each {|k, v| @trending_countries[k] = Country.get_country_name(k)}

функция, выполняющая преобразование идентификатора в имя, находится в отдельной модели, которая называется Country.

  # returns the country name when a country id is given.
  def self.get_country_name(country_id)
    country = self.find_by(id: country_id)
    return country.name
  end

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018
old_hash = { 62=>:wee, 12=>:big, 8=>:medium }
country_id_to_name = { 62=>"Monaco", 8=>"France", 12=>"China" }

old_hash.each_with_object({}) { |(k,v),h| h[country_id_to_name[k]] = v }
  #=> {"Monaco"=>:wee, "China"=>:big, "France"=>:medium}
0 голосов
/ 09 ноября 2018

Один из способов сделать это:

old_hash.map { |key, value| [Country.get_country_name(key), value] }.to_h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...