2009-11-11 12 views
7

私はActiveRecordモデルで次の行を持っています:PostgreSQL、Railsと:order =>問題

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

これはrecord_usersモデルのインデックスフィールドを使って注文する方法でrecord.usersを読み出すことを可能にすることを目的としています。

問題は、PostgreSQLで次のエラーで失敗することです。

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

動作させるためにステートメントを修正する方法はありますか?

+0

生成されたSQLを投稿できますか? –

答えて

10

ActiveRecordでバグと呼ぶことができます。 PosgreSQLはMySQLよりも少し制限があります。代わりに、このように関連付けを設定することで、ActiveRecordのを助けることができる:

class Record < ActiveRecord::Base 
    has_many :users, 
    :through => :record_users, 
    :select => 'DISTINCT users.*, record_users.index', 
    :order => "record_users.index ASC" 
+0

それは可能です。 MySQLは、それが受け入れるものではもう少し許容的で非標準的です。 – MkV

+0

私はそれを得ることはできません - 上の私のソリューションに何が問題なのですか?私は自分のプロジェクトでPostgresを使っているので使っているので知っておきたい) –

+0

キャスパー、ジェイムズはそれが悪い解決策だとは思わなかった;-)また、それはタイプミスですか? – cmaughan

2

ちょうど(それが無効とマークされました..ので、我々はそれを戻すことができ灯台チケットからコピー)githubの上のレールの課題追跡でこの問題を投稿しました:

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

あなたは、これがうまく固定したい場合は、それを宣伝! :)