2016-05-24 7 views
0

Guten Morgen Überlauf.Alle Datensätze auswählen, wenn Datensatz eine der IDs von Array hat

Ich habe ein Problem beim Versuch, alle Treatments, die eine der IDs in einem Array namens @problem gespeichert haben, zu wählen.

Hier ist meine Behandlungen Controller.

@problem = Remedy.find_by_sql(["SELECT id FROM remedies WHERE LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]) 

query = "SELECT * FROM treatments INNER JOIN remedies_treatments on treatments.id = remedies_treatments.treatment_id WHERE remedies_treatments.treatment_id LIKE ?" 
@pretreatments = Treatment.find_by_sql([query, @problem]) 

Dies ist Fehler von der Konsole

ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: syntax error at or near "," 
LINE 1: ...d WHERE remedies_treatments.treatment_id LIKE 233,234,224 

Operator ‚LIKE‘ ist wahrscheinlich nicht das, was ich brauche, was ich bin auf der Suche zu tun - ich versuchte, den ANY-Operator, aber ohne Erfolg entweder. Liegt das Problem daran, dass es sich um ein Array von ganzen Zahlen handelt?

Das Behandlungsmodell.

class Treatment < ActiveRecord::Base 

    has_and_belongs_to_many :remedy 

end 

Das Remedy-Modell.

class Remedy < ActiveRecord::Base 

    has_and_belongs_to_many :treatments, dependent: :destroy 
end 

Es ist eine Follow-up-Post, wo mein Problem here

+0

Die postgresql docs zeigen die Syntax für die Auswahl Datensätze, bei denen ein Array jeder einer bestimmten Menge von Werten enthält. –

+0

@DavidAldridge Ich habe es bereits [hier] (http://www.postgresql.org/docs/9.1/static/functions-comparisons.html) angeschaut, aber es scheint ein bisschen blank auf die genaue Syntax. –

+1

Warum verwenden Sie nicht ActiveRecord style ?, und geben Sie einfach 'Treatments.find (@problem)'. Dies sollte funktionieren, wenn das @ Problem ein Array wie [1,2,3,4] ist. –

Antwort

0

Auswahl Rekord von ids Array aufgelöst wurde mit einer Abfrage durchgeführt wird:

Record.where(id: ids) 

wo ids ids-Array ist. Es kann durch eine andere Abfrage ersetzt werden.

Für Ihren Fall Abhilfen durch Übereinstimmungsnamen Auswahl wird wie folgt sein:

ids = Remedy.where("LOWER(remedyName) LIKE ?", name.downcase).pluck(:id) 
+0

Danke für die Hilfe - Ich habe Probleme mit der Syntax von diesem obwohl wegen der Join-Tabelle, die ich verwende . Könnten Sie im Zusammenhang mit meiner Join-Tabelle eine Syntax vorschlagen? –

+0

'Klasse Behandlung

+0

Vielen Dank für Ihre Antwort - aber ich vergleiche 'medicines_treatments.treatment_id' mit der gezupften ID. Wäre 'Record.where (id: ids)' nicht mit der Join-Tabelle verbunden? –