# Grouping of related records

**URL:** <https://www.ruby-forum.com/t/grouping-of-related-records/87203>\
**Category:** Rails\
**Created:** [February 28, 2007, 9:29pm UTC](https://www.ruby-forum.com/t/grouping-of-related-records/87203 "2007-02-28T21:29:22Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Marco\_Kotrotsos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/9fc29f/32.png) [@Marco\_Kotrotsos](https://www.ruby-forum.com/u/Marco_Kotrotsos)\
**Post date:** [February 28, 2007, 9:29pm UTC](https://www.ruby-forum.com/t/grouping-of-related-records/87203/1 "2007-02-28T21:29:22Z")

</div>

Hey, goodevening to all.

I have something that I wonder if I can do better.

I have a list or records, employee records

Marco from Amsterdam  
Silvia from Amsterdam  
Enola from Rotterdam  
Elisa From Utrecht

These are now shown as

Amsterdam  
Marco  
Amsterdam  
Silvia  
Rotterdam  
Enola  
Utrecht  
Elisa

What I would really want is

Amsterdam  
Marco  
Silvia

Rotterdam  
Enola

Utrecht  
Elisa

So to have them grouped by the City from which they come from  
Is there an elegant solution to this? I know a couple, but all seem like  
nasty hacks (like putting all the cities up and query each and every  
city)  
Hope someone can help  
Thank you  
Kind regards,  
Marco

---

<div class="post-metadata">

**Author:** ![Marco\_Kotrotsos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/9fc29f/32.png) [@Marco\_Kotrotsos](https://www.ruby-forum.com/u/Marco_Kotrotsos)\
**Post date:** [March 1, 2007, 4:53am UTC](https://www.ruby-forum.com/t/grouping-of-related-records/87203/2 "2007-03-01T04:53:11Z")

</div>

> Amsterdam  
> Amsterdam  
> Is there an elegant solution to this? I know a couple, but all seem like  
> nasty hacks (like putting all the cities up and query each and every  
> city)

Assuming that each record has name and city as attributes you could do  
something like:

last\_city = nil  
@results.each do |r|  
if last\_city != r.city then  
puts “\n” unless r == @results.first  
puts r.city  
last\_city = r.city  
end  
puts r.name  
end

My memory is there’s a nifty way to do it in Ruby, but I can’t recall  
what  
it is right now…

---

<div class="post-metadata">

**Author:** ![Marco\_Kotrotsos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/9fc29f/32.png) [@Marco\_Kotrotsos](https://www.ruby-forum.com/u/Marco_Kotrotsos)\
**Post date:** [March 1, 2007, 7:29am UTC](https://www.ruby-forum.com/t/grouping-of-related-records/87203/3 "2007-03-01T07:29:21Z")

</div>

class MyLister

def initialize(city, names)  
@city = city  
@names = names  
end

def to\_s  
puts “#{@city}”  
@names.each { |name| puts name }  
end  
end

m = MyLister.new(“Kansas”, [“Andy”, “Brady”, “Cuddy”])  
m.to\_s

This prints:

Kansas  
Andy  
Brady  
Cuddy

Any other elegant solution?

---

<div class="post-metadata">

**Author:** ![Marco\_Kotrotsos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/9fc29f/32.png) [@Marco\_Kotrotsos](https://www.ruby-forum.com/u/Marco_Kotrotsos)\
**Post date:** [March 1, 2007, 10:04am UTC](https://www.ruby-forum.com/t/grouping-of-related-records/87203/4 "2007-03-01T10:04:20Z")

</div>

That’s nifty, but any idea what the Activerecord aquivalent would be?  
Thanks!  
Marco

removed\_email\_address@domain.invalid wrote:

> class MyLister
> 
> def initialize(city, names)  
> @city = city  
> @names = names  
> end
> 
> def to\_s  
> puts “#{@city}”  
> @names.each { |name| puts name }  
> end  
> end
> 
> m = MyLister.new(“Kansas”, [“Andy”, “Brady”, “Cuddy”])  
> m.to\_s
> 
> This prints:
> 
> Kansas  
> Andy  
> Brady  
> Cuddy
> 
> Any other elegant solution?
