Presenting a grouped list of objects from STI

Hello,

I have been following the STI example in AWDWR and have a question about
presenting the output.

I want to output a list of Person objects that are grouped by their
type.

I have an array of all the Person objects and I would like the output to
be as follows.

Employee x3

  • Employee 1
  • Employee 2
  • Employee 3
Manager x2
  • Manager 1
  • Manager 2
... etc

What is the best method for building the output in the view? Should I
use acts_as_list or tree? You’ll notice I also want to have the count
for each type. Is there a built in way to do this or should I hack
something together?

Thank you,
Ryan G.

On Dec 31, 2:58 pm, Ryan G. [email protected]
wrote:

... etc

What is the best method for building the output in the view? Should I
use acts_as_list or tree? You’ll notice I also want to have the count
for each type. Is there a built in way to do this or should I hack
something together?

I would just pull each group out separately in the controller:

@employees = Employee.find(:all)
@managers = Manager.find(:all)

It’s then simple to count and list them out in the view.

Best,

-r

Thank you,
Ryan G.


Posted viahttp://www.ruby-forum.com/.


Ryan R.
http://raaum.org
http://rails.raaum.org – Rails docs
http://locomotive.raaum.org – Self contained Rails for Mac OS X

Ryan G. wrote:

What is the best method for building the output in the view? Should I
use acts_as_list or tree? You’ll notice I also want to have the count
for each type. Is there a built in way to do this or should I hack
something together?

I would use Enumerable#group_by

@people = Person.find(:all)
@people_by_type = @people.group_by(&:class)

Number of managers: @people_by_type[Manager].size
Number of employees: @people_by_type[Employee].size
etc.

To loop through:
<% for klass in @people_by_type.keys %>
<% for person in @people_by_type[klass] %>

Dan M.