2009-11-11 14 views
7

ho la seguente riga nel mio modello ActiveRecord:PostgreSQL, Rails e di ordine: => problema

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

Questo ha lo scopo di consentire a me di leggere record.users in un modo che ordino utilizzando un indice campo nel modello record_users.

Il problema è che questo non riesce su PostgreSQL con il seguente errore:

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

C'è un modo per risolvere la dichiarazione per farlo funzionare?

+0

Puoi pubblicare l'SQL generato? –

risposta

10

Suppongo che si possa chiamare un errore in ActiveRecord. PosgreSQL è un po 'più restrittivo di MySQL. Si può dare una mano ActiveRecord impostando l'associazione come questo, invece:

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

Puoi, dato che lo è. MySQL è un po 'più permissivo e non standard in ciò che accetta. – MkV

+0

Non capisco - cosa c'è di sbagliato nella mia soluzione sopra? Mi piacerebbe sapere, perché lo sto usando nel mio progetto in esecuzione su Postgres;) –

+0

Casper, non penso che James stia dicendo che è stata una pessima soluzione ;-) Inoltre, è un errore di battitura - DISTINCT? – cmaughan

2

appena pubblicato questo problema su delle rotaie issue tracker su github (copiato dal biglietto faro in modo che potessimo riportarlo .. è stato segnato non valida):

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

Promuovere se si desidera questa fissa bene! :)

Problemi correlati