2009-11-11 6 views
7

Ich habe die folgende Zeile in meinem Active Modell:PostgreSQL, Rails und: order => Problem

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

Dies soll mir ermöglichen, record.users in einer Art und Weise zu lesen, die ich mit einem Index bestellen Feld im record_users-Modell.

Das Problem ist, dass dies nicht auf PostgreSQL mit dem folgenden Fehler:

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

Gibt es eine Möglichkeit, die Aussage zu beheben, damit es funktioniert?

+0

Können Sie das generierte SQL posten? –

Antwort

10

Ich nehme an, Sie könnten es einen Fehler in ActiveRecord nennen. PosgreSQL ist ein bisschen restriktiver als MySQL. Sie können Active helfen, indem die Zuordnung wie folgt statt der Einrichtung:

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

Sie können, seit es ist. MySQL ist etwas toleranter und nicht-standard in dem, was es akzeptiert. – MkV

+0

Ich verstehe es nicht - was ist los mit meiner Lösung oben? Ich würde es gerne wissen, weil ich es in meinem eigenen Projekt verwende, das auf Postgres läuft;) –

+0

Casper, ich glaube nicht, dass James gesagt hat, dass es eine schlechte Lösung war ;-) Ist das auch ein Tippfehler - DISTINCT? – cmaughan

2

Genau dieses Problem hat auf den Schienen Issue Tracker auf GitHub (von Leuchtturm Ticket kopiert und so konnten wir es zurück bringen .. es war ungültig markiert):

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

es fördern, wenn Sie dieses schön feste wollen! :)

Verwandte Themen