2012-05-14 8 views
6

sto facendo un polimorfico unirsi in questo modo:clausola ambigua in Rails

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

Ed è tornare come così:

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

Qualcuno sa come fare questo un ambiguo? :)

+1

Sei davvero il nome della classe come oggetto? O è solo per questo esempio di codice? Solo curioso. :) – Suborx

+0

No solo per un esempio :) – Trip

risposta

7

Non ama la sezione name LIKE.

Sembra che ci sia una colonna denominata name in ciascuna tabella. Preface that name specifico con il nome della tabella da cui si desidera che valore.

Questo sembra che dovrebbe essere o

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

o

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

ho trovato in generale, il modo migliore per risolvere questi problemi è quello di visualizzare il codice SQL generato e determinare dove la il problema è da quello. Puoi trovare lo sql nei log.

+1

Wow, grazie enorme! Grazie mille! – Trip

3

nome deve essere una proprietà (e una colonna) in entrambi i lavori e qualunque sia l'altro oggetto (tabella) è quindi deve essere pienamente qualificato.

cambiamento

"name like..." 

a

"tablename.name like..." 

proprio come si sono qualificanti

"jobs.name"