Ruby - Анализирайте списък с градове на местоположения, след това вземете този списък с градове и анализирайте местоположенията на всеки един

В момента се опитвам да създам страница с директория за моите бизнес местоположения. Мога лесно просто да изброя всички местоположения, но бих предпочел да изброя състоянията на местоположенията, след това отдолу да изброя градовете за местоположение в този щат. След това най-накрая под държавата избройте имената на местоположенията.

В момента получавам всички местоположения с реда по-долу.

@locations = @brand.locations.all

След това създавам два празни масива за щати и градове.

@states = []
@cities = []

След като създадох масивите, искам да премина през местоположенията, за да добавя щатите и градовете към съответните им масиви.

@locations.each do |location|
  @states << location.state
  @cities << location.city
end

Как мога да добавя местоположенията към съответните им градове в градския масив? Обмислях да използвам хеш в масива @cities, но останах от там. Съжалявам, ако това изглежда като основен въпрос.


person Neal Deters    schedule 17.03.2016    source източник


Отговори (1)


Разгледайте #group_by и #map:

Hash[@locations.all.group_by(&:state).map{|k,v| [k, v.group_by(&:city)]}]

Това генерира нещо като:

{
  "NY": {
    "Schenectady": [ ... locations in schenectady new york ... ],
    "Manhattan": [ ... locations in manhattan new york ...]
  },
  "TX": {
    "Austin": [ ... locations in austin texas ... ]
  }
}
person sled    schedule 18.03.2016
comment
беше зает да пише по-нисък отговор - person toddmetheny; 18.03.2016