Rails中的歧义条款

时间:2012-05-14 19:18:39

标签: mysql ruby-on-rails

我正在做这样的多态连接:

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

任何人都知道如何让这个 un 暧昧吗? :)

2 个答案:

答案 0 :(得分: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 :(得分:3)

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

更改

"name like..." 

"tablename.name like..." 

就像你正在排位赛一样

"jobs.name"