How to order by a field in the belongs_to association


#1

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


#2

On Sun, Dec 21, 2008 at 7:34 PM, Patrick D. removed_email_address@domain.invalid
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’


#3

On Sun, Dec 21, 2008 at 2:24 PM, Franz S.
removed_email_address@domain.invalidwrote:

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’

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


#4

On Sun, Dec 21, 2008 at 8:40 PM, Patrick D. removed_email_address@domain.invalid
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


#5

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