2012-05-14 17 views
6

estoy haciendo un polimórfica se unen de este modo:cláusula ambigua en Rails

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

Y se está volviendo tan así:

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

Alguien sabe cómo hacer esto ONU ambiguo? :)

+1

¿Realmente nombras tu clase como Objeto? ¿O es solo por este ejemplo de código? Sólo curioso. :) – Suborx

+0

No solo por un ejemplo :) – Trip

Respuesta

7

No le gusta la sección name LIKE.

Parece que hay una columna llamada name en cada una de las tablas. Prefiera ese name específico con el nombre de la tabla desde la que quiere que ese valor sea.

Esta parece que debería ser

.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" }) 

que he encontrado, en general, la mejor manera de resolver estos problemas es a ver el SQL generado y determinar dónde está el el problema es de eso. Puede encontrar el sql en los registros.

+1

Wow muchísimas gracias! ¡Muchas gracias! – Trip

3

El nombre debe ser una propiedad (y una columna) en ambos trabajos y cualquiera que sea el otro objeto (tabla) es, por lo tanto, debe estar totalmente calificado.

cambio

"name like..." 

a

"tablename.name like..." 

igual que haya calificado

"jobs.name"