Best way of sorting/grouping objects

I have a Model called Page, which has a column called page_type.
I want to display all pages by page type (which can change/be added).

What is the best way of doing this? I was, in the view looping through
each page_type, then doing an SQL search for a Page with that
page_type. But I don’t want to call Models through the View…

I tried to create a laid out like this:

@hash[:type1] = {:object1_id => object, :object2_id => object }
@hash[:type2] = {:object1_id => object, :object2_id => object }


Then using a partial to go through the types… but I’m getting errors.

Anyone have a good idea of how to do this?


Are you looking for something like this?

@pages = Page.all(:order => ‘page_type’)

“order” is just a SQL ORDER fragment. Then display it in your view

= render :partial => ‘page’, :collection => @pages

I’m not sure if that’s too simplistic of an approach. Does that help?


That could work. But I need it to order by page_order also. I would
like to group them into 3 groups then sort them by that. In the end I
want it to look something like this in html…

Page 1
Page 2

Page 1
Page 2

Before I was doing something like this (I had an array of each page
type called page_types):

<% page_types.each do |t| %>
<%= t %>'s
<% Page.find(:all, :conditions=>{:page_type=>t}, :order=>position
<% end %>
<% end %>

By any chance do you have a model named PageType? If you, you could
set up a relationship between PageType and Page:

belongs_to :page_type

has_many :pages

Then display it with:

@page_types = PageType.all

your_view.html.haml (or .erb, etc.)

  • @page_types.each do |page_type|
    = list_of page_type.pages do |page|

If you don’t already have a PageType model, or don’t want to introduce
another model, you could probably use:

@page_types = Page.all(:order => ‘page_type’, :group => ‘page_type’)

and then play around with the result of that. (At least I think that’s
correct… haha, sorry if it’s not)

Good luck,

Thanks Angelo! That is a great idea. In the long run that would
probably make more sense. But in the meantime I’ll look into
the :group fix. What exactly does that do?