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 must be a property (and column) in both jobs and whatever the other object (table) is therefore it needs to be fully qualified.

change

"name like..." 

to

"tablename.name like..." 

just like you are qualifying

"jobs.name"
于 2012-05-14T19:22:52.583 に答える