Forum: Ruby on Rails Trying to sort results of one-to-many relationship find

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Corey M. (Guest)
on 2009-01-08 18:10
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?
Harold (Guest)
on 2009-01-08 19:57
(Received via mailing list)
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>
Corey M. (Guest)
on 2009-01-08 20:42
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!
This topic is locked and can not be replied to.