Trying to sort results of one-to-many relationship find


#1

Assuming I have two models:

Order “belongs_to :payee”
Payee “has_many :orders”

In the orders table, I store the payee_id.

If I want to pull all orders and display the list alphabetically by the
payees last name, what would be the best way to do it?

Would I need to setup a true “join” table and then run my find on it? I
can’t do this through the view using a sort plugin since that simply
changes the finders SQL and doesn’t include the association logic needed
here.

Since I’m accessing the payee’s name through the association
“order.payee.last_name” what is the best way to accomplish what I need
or do I need to write some convoluted method that breaks down the
recordset and orders it manually?


#2

This is a plain association, no join table involved.

Try this in script/console and see if it solves your problem. The DB
can easily take care of the sorting:

orders = Order.find(:all, :conditions => ‘…’, :include
=> :payee, :order => ‘payees.last_name’)

Then,

orders.each { |o| puts o.payee.last_name }

-H

On Jan 8, 11:10 am, Corey M. removed_email_address@domain.invalid


#3

Harold wrote:

orders = Order.find(:all, :conditions => ‘…’, :include
=> :payee, :order => ‘payees.last_name’)

Awesome. The “:include” option wasn’t something I was aware you could
use in a find for the model. I knew this could be handled using a nice
rails-like convention without having to code some convoluted sorting
method.

That makes life much easier. Thank you very much!