7

I have the following line in my ActiveRecord model:

class Record < ActiveRecord::Base
    has_many :users, :through => :record_users, :uniq => true, :order => "record_users.index ASC"

This is intended to enable me to read out record.users in a way that I order using an index field in the record_users model.

The problem is that this fails on PostgreSQL with the following error:

ActionView::TemplateError (PGError: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list

Is there a way to fix the statement to make it work?

1
  • Can you post the generated SQL? Commented Nov 11, 2009 at 17:30

3 Answers 3

10

I suppose you could call it a bug in ActiveRecord. PosgreSQL is a bit more restrictive than MySQL. You can help out ActiveRecord by setting up the association like this instead:

class Record < ActiveRecord::Base
  has_many :users,
   :through => :record_users,
   :select => 'DISTINCT users.*, record_users.index',
   :order => "record_users.index ASC"
Sign up to request clarification or add additional context in comments.

6 Comments

You can, since it is. MySQL is a bit more permissive and non-standard in what it accepts.
I don't get it - what's wrong with my solution above? I'd like to know, because I'm using it in my own project running on Postgres ;)
Casper, I don't think james was saying it was a bad solution ;-) Also, is that a typo - DISTINCT?
Also, my question was - is there a way to fix the statement to make it work?. Your answer worked perfectly!
Cool. I guess I assumed that James had voted my answer down and that his comment was the explanation for it - guess not ;)
|
2

Just posted this issue on rails's issue tracker on github (copied from lighthouse ticket so we could bring it back.. it was marked invalid):

https://github.com/rails/rails/issues/520

Promote it if you want this fixed nicely! :)

Comments

1

I ran into something similar before and I believe it's an AR bug related to PGSQL (https://rails.lighthouseapp.com/projects/8994/tickets/1711-has-many-through-association-with-order-causes-a-sql-error-with-postgresql).

I got around it by dropping the DISTINCT (:uniq) directive and resolved the uniq records another way. Kind of a bummer though.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.