7

ActiveRecordモデルに次の行があります。

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

ステートメントを修正して機能させる方法はありますか?

4

3 に答える 3

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"
于 2009-11-11T18:21:17.967 に答える
2

この問題をgithubのrailsの問題追跡システムに投稿しました(灯台のチケットからコピーしたので、元に戻すことができます。無効とマークされました):

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

これをうまく修正したい場合は、宣伝してください。:)

于 2011-05-11T16:19:12.497 に答える
1

以前に似たようなものに遭遇しましたが、これはPGSQLに関連するARのバグだと思います(https://rails.lighthouseapp.com/projects/8994/tickets/1711-has-many-through-association-with-order-causes-a -sql-error-with-postgresql)。

DISTINCT(:uniq)ディレクティブを削除して回避し、uniqレコードを別の方法で解決しました。でもちょっと残念です。

于 2009-11-11T16:30:56.463 に答える