2009-11-11 8 views
7

Mam następującą linię w moim modelu ActiveRecord:PostgreSQL, Szyny i: order => Problem

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

ta ma na celu umożliwienie mi odczytać record.users w taki sposób, że mogę zamówić za pomocą indeksu pole w modelu record_users.

Problemem jest to, że nie działa na PostgreSQL z powodu następującego błędu:

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

Czy istnieje sposób, aby rozwiązać oświadczenie, aby to działało?

+0

Czy możesz opublikować wygenerowany kod SQL? –

Odpowiedz

10

Przypuszczam, że można nazwać to błędem w ActiveRecord. PosgreSQL jest nieco bardziej restrykcyjny niż MySQL. Możesz pomóc ActiveRecord poprzez utworzenie stowarzyszenia tak zamiast:

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

Możesz, ponieważ tak jest. MySQL jest nieco bardziej permisywny i niestandardowy w tym, co akceptuje. – MkV

+0

Nie rozumiem - co jest nie tak z powyższym rozwiązaniem? Chciałbym wiedzieć, ponieważ używam go w moim własnym projekcie działającym na Postgresie;) –

+0

Kacper, nie sądzę, żeby James mówił, że to złe rozwiązanie ;-) A czy jest to literówka - DISTINCT? – cmaughan

2

Podobnie pisał ten problem na emisyjnej trackera szyn jest na github (skopiowane z latarni biletu więc mogliśmy przynieść go z powrotem .. to zostało oznaczone jako niepoprawne):

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

promować to, jeśli chcesz to naprawić ładnie! :)