2012-05-14 12 views
6

Ich mache eine polymorphe wie so kommen:Mehrdeutige Klausel in Rails

Object.joins(:customer).includes("jobs.name").merge(@customer.children.scoped).where("name LIKE :name OR job_number LIKE :name", {:name => "JOB" }) 

Und es zurückkehrt, wie so:

Mysql2::Error: Column 'name' in where clause is ambiguous 

Wer weiß, wie diese un mehrdeutig zu machen? :)

+1

Benennen Sie Ihre Klasse wirklich als Objekt? Oder ist es nur für dieses Codebeispiel? Nur neugierig. :) – Suborx

+0

Nein nur für ein Beispiel :) – Trip

Antwort

7

Es mag nicht die name LIKE Abschnitt.

Es sieht so aus, als ob in jeder der Tabellen eine Spalte namens name ist. Vorab die spezifische name mit dem Namen der Tabelle, aus der dieser Wert sein soll.

Das sieht aus wie es entweder

.where("jobs.name LIKE :name OR job_number LIKE :name", {:name => "JOB" }) 

oder

.where("customers.name LIKE :name OR job_number LIKE :name", {:name => "JOB" }) 

ich im Allgemeinen gefunden haben, ist der beste Weg, um diese Probleme zu lösen, die SQL erzeugt anzuzeigen und zu bestimmen, wo das sein sollte Problem ist von daher. Sie können die SQL in den Protokollen finden.

+1

Wow, vielen Dank! Vielen Dank! – Trip

3

name muss eine Eigenschaft (und Spalte) in beiden Jobs und was auch immer das andere Objekt (Tabelle) ist daher muss es vollständig qualifiziert sein.

Änderung

"name like..." 

zu

"tablename.name like..." 

wie Sie

qualifizieren
"jobs.name"