How to order by a field in the belongs_to association

2,559 views
Skip to first unread message

Patrick Doyle

unread,
Dec 21, 2008, 1:34:43 PM12/21/08
to rubyonra...@googlegroups.com
Consider this:
class Document
  has_many :revisions
end
class Revision
  belongs_to :document
end

Suppose I wanted to query all records in my revisions table, but I wanted to order the results by document.number.  What sort of conditions would I have to impose on my call to Revision.find_all?  Is there a way to specify this in Ruby/Rails?  Or will I need to (shudder) write some SQL?

--wpd

Franz Strebel

unread,
Dec 21, 2008, 2:24:32 PM12/21/08
to rubyonra...@googlegroups.com
On Sun, Dec 21, 2008 at 7:34 PM, Patrick Doyle <wpd...@gmail.com> wrote:
> Consider this:
> class Document
> has_many :revisions
> end
> class Revision
> belongs_to :document
> end
> Suppose I wanted to query all records in my revisions table, but I wanted to
> order the results by document.number. What sort of conditions would I have

Specify the :order param in your find, à la :order => 'documents.number ASC'

Patrick Doyle

unread,
Dec 21, 2008, 2:40:47 PM12/21/08
to rubyonra...@googlegroups.com
I can't figure out how to make that work -- the revisions table does not have a column named "documents".  It does have a "document_id" field, which is associated with a specific record in the documents table.  I'm trying to figure out how I can query the "revisions" table, but sort the results based on data stored in the associated record in the "documents" table.

--wpd
 

Franz Strebel

unread,
Dec 21, 2008, 3:56:11 PM12/21/08
to rubyonra...@googlegroups.com
On Sun, Dec 21, 2008 at 8:40 PM, Patrick Doyle <wpd...@gmail.com> wrote:
> I can't figure out how to make that work -- the revisions table does not
> have a column named "documents". It does have a "document_id" field, which
> is associated with a specific record in the documents table. I'm trying to
> figure out how I can query the "revisions" table, but sort the results based
> on data stored in the associated record in the "documents" table.

You'll need to do a join to the documents table then, à la

@revisions = Revision.find(:all, :include => :document, :order =>
'documents.sort_field')

Read up on ActiveRecord find for more info.

Regards,
Franz

Patrick Doyle

unread,
Dec 21, 2008, 5:40:28 PM12/21/08
to rubyonra...@googlegroups.com
You'll need to do a join to the documents table then, à la

@revisions = Revision.find(:all, :include => :document, :order =>
'documents.sort_field')

Beautiful.  That's just what I was looking for.

--wpd
 
Reply all
Reply to author
Forward
0 new messages