2016-08-09 15 views
0

Ich habe zwei in einem Rails-4-basierten Web-App gebaut Einheiten:Rails 4: Join-Abfragen mit übergeordneter Entität Tabelle, Fehler: PG :: UndefinedTable: ERROR: Fehlender FROM-Klausel Eintrag für Tabelle "heißt es:"

class University 
    belongs_to :state 
end 

class State 
    has_many :universities 
end 

Ich versuche, eine Abfrage-Methode zu erstellen, die ein Array von Universitäten für ein bestimmtes Array von Status zurückgibt.

Zum Beispiel:

Für die Staaten Code: WA (Washington), OR (Oregon), CO (Colorado): [WA, OR, CO], sollten sie die folgenden Universitäten zurück:

University of Washington 
University of Oregon 
University of Colorado 
.... 

I haben diese Rahmen-Methode geschrieben, aber es funktioniert nicht (siehe den Fehler unten):

universities.by_value_array(params[:state_codes]) # scope method by_value_array is defined in the University model 

scope :by_value_array, -> (state_codes) { 
    conditions = [] 
    q = "" 
    state_codes.each_with_index { |code, i| 
     if i == 0 
     q = "universities.state_id = state.id and states.code = ?" 
     else 
     q += " OR universities.state_id = state.id and states.code = ?" 
     end 
     conditions.push(code.to_s) 
    } 
    conditions.insert(0, q) # prepend 

    joins(:state).where(conditions) 
} 

Fehlermeldung:

PG::UndefinedTable: ERROR: missing FROM-clause entry for table "state" 
LINE 1: ...l_id" = $1 AND (universities.state_id = state... 
               ^
: SELECT COUNT(*) FROM "universities" INNER JOIN "states" ON "states"."id" = "universities"."state" WHERE "universities". (universities.state_id = state.id and state.code = 'WA' OR universities.state_id = state.id and state.code = 'CO') 

Ein HTTP-Status von 422 - Unprocessable Einheit wurde aus diesem Fehler ausgelöst.

Ich bin mir nicht sicher, wie die Joins-Abfrage in dieser Situation funktioniert, oder ist das überhaupt möglich? Danke für jede Eingabe!

Antwort

1

sollte Der Tabellenname states nicht state

if i == 0 
    q = "universities.state_id = state.id and states.code = ?" 
else 
    q += " OR universities.state_id = state.id and states.code = ?" 
end 

Ändern der Tabellenname

if i == 0 
    q = "universities.state_id = states.id and states.code = ?" 
else 
    q += " OR universities.state_id = states.id and states.code = ?" 
end 
sein
Verwandte Themen