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

任何人都知道如何使这模棱两可?:)

4

2 回答 2

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。

于 2012-05-14T19:24:52.323 回答
3

name 必须是两个作业中的属性(和列),并且无论其他对象(表)是什么,因此它需要完全限定。

改变

"name like..." 

"tablename.name like..." 

就像你有资格一样

"jobs.name"
于 2012-05-14T19:22:52.583 回答