2012-05-14 85 views
6

我做了多態加入像這樣:不明確的條款

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

而且這回像這樣:

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

任何人都知道如何使這個 ambigous? :)

+1

你真的命名您的類作爲對象?或者只是爲了這個代碼示例?只是好奇。 :) – Suborx

+0

不只是一個例子:) – Trip

回答

7

它不喜歡的name LIKE部分。

它看起來像有一個名爲每個表中的列name。前言特定name你想要的值是從表的名稱。

這看起來應該是

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

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

我一般發現的,解決這些問題的最好辦法是查看生成的SQL,並確定在何處問題在於此。你可以在日誌中找到sql。

+1

哇巨大的感謝!非常感謝! – Trip

3

名稱必須在兩個工作屬性(和列),因此無論其他對象(表)是它必須是完全合格的。

變化

"name like..." 

"tablename.name like..." 

就像你在排位賽

"jobs.name"