@maxyc_webber
Web-программист

Rails: Как разгрупировать данные?

Такая задача. В базе есть список городов.
Надо вывести список таким образом, чтобы города с одинаковой первой буквой в названии собирались в отдельных div
например
div
архангельск, армавир, алматы
div
москва
div
питер

на текущий момент познаний хватает только на city.all
обещаю быстро учиться
  • Вопрос задан
  • 2233 просмотра
Решения вопроса 1
AMar4enko
@AMar4enko
Know your standart library
Метод group_by модуля Enumerable
['Test','Bla','Test2'].group_by{|str| str[0]}
 => {"T"=>["Test", "Test2"], "B"=>["Bla"]}

Для вашего случая что-то вроде
@cities_grouped = city.all.group_by{|r| r.name[0]}
<% @cities_grouped.each do |letter, group| %>
    <div>
        <% @group.each do |city| %>
            <%= city.name %>      
        <% end %> 
    </div>
<% end %>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Prognosticator
@Prognosticator
TODO: Здесь будут ворованные умные мысли, типа мои
поиск по первой букве
City.where("your_field_name REGEXP ?", "регулярка")


лучше выберите все города и сделайте сортировку посредством js
я думаю их у вас не 100 тыщ, ибо на кой 33 запроса на бэкенде
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
Мне кажется разумнее всего делать это в представлении.
Приблизительно так (не проверял)
<% cityLetter = '' %>
<% @cities.each do |city| %>
  
        <% if (cityLetter != city.name[0])
             cityLetter = city.name[0]
        %>
          </div><div>
        <% end %>

        <%= city.name %>

<% end %>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы