Sorting on a related STI-field

I have the following models: Event   name   location   customer_id   with relation   belongs_to :customer

Person   name   address   city   type

Customer < Person   has_many :events

Now I want to have a list, sorted on the name of the customer.

This doesn’t work Event.find(:all, :include => :customer, :order => ‘customer.name’)

Or isn’t this possible at all, just back to plain sql?

Greetz, Adrie

sure you can write in plain sql using find_by_sql method. but it is an easy query and it would easier doing it directly in rails code. I'm not sure i understand what you want maybe it is : Costumer.find :all, :include => :events, :order => 'customers.name'

and a question: maybe you made an errors by typing but why you wrote customer (singular) in 'customer.name' ?

Jean-sébastien Jney wrote:

Costumer.find :all, :include => :events, :order => 'customers.name'

Jean,

I want the Events (a selection on event.starttime) listed, but sorted bij de Customer's name. Not all Events have a customer, so your query went give them.

That why i tried: Event.find(:all, :include => :customer, :order => 'customer.name')

Anyway, thanks for your reply Adrie

Jean-sébastien Jney wrote:

Costumer.find :all, :include => :events, :order => 'customers.name'

Jean,

I want the Events (a selection on event.starttime) listed, but sorted bij de Customer's name. Not all Events have a customer, so your query went give them.

That why i tried: Event.find(:all, :include => :customer, :order => 'customer.name')

just add a condition: 'customers.id IS NOT NULL' (for mysql, other dbs
will have something equivalent'). There's also :joins instead of :include (which does mostly the same
joining, but doesn't actually instantiate the customer objects)

Fred

Frederick Cheung wrote:

just add a condition: 'customers.id IS NOT NULL' (for mysql, other dbs will have something equivalent'). There's also :joins instead of :include (which does mostly the same joining, but doesn't actually instantiate the customer objects)

Fred

Fred,

I worked it out, this is the way:

Event.find(:all, :include => :customer, :order => 'people.name')

The NULL clause doesn't seem necessary, just use the plural name of the table, not the model.

Thanks for the support Adrie