Как получить доступ к хешам, чьи ключи являются массивами в Rails? - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь получить доступ к данным, имеющим подобную структуру (статус каждого пользователя на определенные даты).Как видите, все хеш-ключи - это массивы.Эти данные были получены из БД с использованием group_by.

data = {
  ["active", "Rick"]=>["2019-07-09", "2019-07-10"],
  ["active", "Morty"]=>["2019-07-09", "2019-07-10"],
  ["active", "Summer"]=>["2019-07-09", "2019-07-10"],
  ["inactive", "Rick"]=> ["2019-07-01", "2019-07-02", "2019-07-03"],
  ["inactive", "Summer"]=>["2019-07-15"]
}

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

Я знаю, что каждый элемент в хэше может быть доступен следующим образом: data[["active", "Summer"]].Я пытался сделать что-то вроде data[["active", "*"]] (чтобы получить данные активного состояния для всех пользователей), но это не сработало.

data = {
  "active"=>{
    "Rick"=>["2019-07-09", "2019-07-10"],
    "Morty"=>["2019-07-09", "2019-07-10"],
    "Summer"=>["2019-07-09", "2019-07-10"]
  },
  "inactive"=>{
    "Rick"=>["2019-07-01", "2019-07-02", "2019-07-03"],
    "Summer"=>["2019-07-15"]
  }
}

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Это должно работать:

new_data = {}
data.each do |k, v|
  new_data[k.first] ||= []
  new_data[k.first] << { k.last => v}
end

Но если вы управляете БД / запросом, возможно, лучше по возможности сразу извлечь ваши данные из БД в правильном формате.

1 голос
/ 09 июля 2019

Вы можете сделать что-то вроде этого -

    new_data = { 'active' => [], 'inactive' => [] }
    data.each do |key, value|
      if key.first == 'active'
        new_data['active'] << { key.last => value }
      elsif key.first == 'inactive'
        new_data['inactive'] << { key.last => value }
      end
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...