2016-05-29 4 views
1

Ich habe eine LibraryEntry Modell mit einer Zeichenfolge Spalte status, die zu einem User Modell gehört.Rails Reihenfolge von String-Spalte Wert durch Joins

Ich möchte alle LibraryEntry Modelle finden, die zu einem User gehören, wo ich status eine Priorität für den Wert der Zeichenfolge Spalte kann das Modell zu sortieren.

Zum Beispiel status das Modell in dieser Reihenfolge von der String-Spalte zu sortieren: [watch,complete,drop,backlog,wishlist]

ich diesen Thread überprüft haben Postgres: Order by string column with known values und habe versucht, meine eigene SQL-Anweisung zu schreiben, aber es hat nicht funktioniert, wird der Fehler immer PG::AmbiguousColumn: ERROR: column reference "status" is ambiguous

#This is under the model LibraryEntry` 
def self.priority_order 
    order("CASE 
     WHEN status = 'watch' THEN '1' 
     WHEN status = 'complete' THEN '2' 
     WHEN status = 'wishlist' THEN '3' 
     WHEN status = 'drop' THEN '4' 
     WHEN status = 'backlog' THEN '5' 
    END") 
    end 
#The query to sort the model in the controller 
@lib = @user.library_entries.priority_order.joins(:vn).order('vns.name') 

status kann entweder

  • watch

  • complete

  • drop

  • backlog
  • wishlist
+0

"... aber es hat nicht funktioniert" - weitere Details bitte. –

Antwort

2

Sie an einem anderen Tisch Verbindung (Benutzer), die auch eine Spalte mit dem Namen Status hat.

In Ihrer Bestellung Präfix-Status mit dem Namen der LibraryEntry-Tabelle.

Vermutlich:

def self.priority_order 
    order("CASE 
    WHEN library_entries.status = 'watch' THEN '1' 
    WHEN library_entries.status = 'complete' THEN '2' 
    WHEN library_entries.status = 'wishlist' THEN '3' 
    WHEN library_entries.status = 'drop' THEN '4' 
    WHEN library_entries.status = 'backlog' THEN '5' 
    END") 
end 

... oder ...

def self.priority_order 
    order("CASE library_entries.status 
    WHEN 'watch' THEN '1' 
    WHEN 'complete' THEN '2' 
    WHEN 'wishlist' THEN '3' 
    WHEN 'drop'  THEN '4' 
    WHEN 'backlog' THEN '5' 
    END") 
end 

Dies ist immer eine gute Praxis, wenn einschließlich SQL-Fragmente in Ihrem Rails-Code.