Как эффективно получить данные, используя следующую модель - PullRequest
1 голос
/ 27 мая 2011

Это может быть что-то, о чем уже спрашивали, но я не смог его найти.У меня есть модель, которая содержит следующие три столбца: [«id», «category», «name»], и я хотел бы организовать свою страницу следующим образом:

Заголовок (список всех категорий, ссылкав таблицу со всеми именами для этой категории и количеством имен в этой категории)

  • Категория 1: 5 имен
  • Категория 2: 7 имен
  • Категория3: 4 имени

Содержимое (одна таблица на категорию, в которой перечислены все имена этой категории)

  • Таблица «категория 1»: «имя1», «…» имя5
  • Таблица «категория 2»: «имя1», «…» имя7 »
  • Таблица« категория 3 »:« имя1 »,«… »имя4»

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

Спасибо,

1 Ответ

1 голос
/ 27 мая 2011
h = {}                                                                       
MyModel.all.sort_by(&:category).each do |m|                                                      
  h[m.category] ||= []                                                       
  h[m.category] << m.name                                                    
end                                                                          

h.each do |category, names|                                                  
  puts "#{category}: #{names.count} names"                                   
end                                                                          

h.each do |category, names|                                                  
  puts "#{category}: #{names.sort * ', '}"                                        
end                                                                          
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...