PostgreSQL, Rails и проблема: order => - PullRequest
7 голосов
/ 11 ноября 2009

В моей модели 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

Есть ли способ исправить утверждение, чтобы оно работало?

Ответы [ 3 ]

10 голосов
/ 11 ноября 2009

Полагаю, вы могли бы назвать это ошибкой в ​​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"
2 голосов
/ 11 мая 2011

Только что опубликовал эту проблему на трекере рельсов на github (скопировано с билета на маяк, чтобы мы могли вернуть его обратно ... оно было помечено как недействительное):

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

Продвиньте это, если хотите, чтобы это было исправлено красиво! :)

1 голос
/ 11 ноября 2009

Я сталкивался с чем-то похожим раньше и считаю, что это ошибка AR, связанная с PGSQL (https://rails.lighthouseapp.com/projects/8994/tickets/1711-has-many-through-association-with-order-causes-a-sql-error-with-postgresql).

Я справился с этим, отбросив директиву DISTINCT (: uniq) и разрешив записи uniq другим способом. Вид облома, хотя.

...