Rails - перечислимые множественные ассоциации Group_By - PullRequest
2 голосов
/ 13 января 2011

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

s.inventoryitems.group_by{|i| i.locations}

Ради простоты это возвращает мне что-то вроде этого:

{[1, 2, 3]=>["a"], [2]=>["b", "c"], []=>["d"]}

Я ищу результат, подобный этому, хотя:

{[1] => ["a"], [2] => ["a","b","c"], [3] => ["a"], [] => ["d"]}

Я работаю над реструктуризацией, чтобы все это можно было сделать более интуитивно-ориентированным образом, ориентированным на связь с БД и моделью, но пока что мне нужнореализовать это немедленно и нужно спорить с некоторыми Руби и я не уверен.Спасибо за любую помощь!

1 Ответ

1 голос
/ 13 января 2011

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

h = { [ 1, 2, 3 ] => [ "a" ], [ 2 ] => [ "b", "c" ], [ ] => [ "d" ] }
s = { }

h.each do |keys, values|
  keys.each do |key|
    values.each do |value|
      s[[ key ]] ||= [ ]
      s[[ key ]] << value
    end
  end

  if (keys.empty?)
    s[[ ]] = values
  end
end

puts s.inspect
# => {[1]=>["a"], [2]=>["a", "b", "c"], [3]=>["a"], []=>["d"]}
...